【发布时间】:2015-05-01 11:01:58
【问题描述】:
我想看看是否有一种方法可以在不使用循环的情况下将矩阵的列与同一矩阵的所有其他列进行比较。显然,结果可能非常大,并且对于 [m x n] 矩阵的大小将随着 n**2 增长。但在合理的值 n 下,它是有希望的。
具体来说,我有一个像这样的矩阵:
| 1 -1 1 1 -1 |
| -1 -1 1 1 1 |
| -1 1 -1 -1 1 |
| 1 -1 1 -1 1 |
并且需要获取所有列组合的 AND 和 XOR 值(或其他逻辑比较)。这可能没有循环吗?我对 Python、R 和 Octave 比较陌生,但已经多次遇到类似的问题。因此,欢迎使用 Python 或其他语言的解决方案!
例子:
| 1 -1 1 | | 2 0 2 0 -2 0 2 0 1 |
| 1 1 -1 | => | 2 2 0 2 2 0 0 0 -2 |
|-1 1 1 | |-2 0 0 0 2 2 0 2 2 |
[第1列+矩阵,第2列+矩阵,第3列+矩阵]
它变得非常快。有很多重复,例如我不需要将一列添加到自身,我也不需要将每一列与所有其他列进行比较,但所有列号较高的列更好(在右侧边)。也许像上面的例子那样实现它更容易。也许这是不可能的!我可以想象这是一种快速吸收所有可用内存的功能!
【问题讨论】:
-
你到底在比较什么,一列与列在同一位置?
-
是的,我想以最简单的形式添加列。因此,比较第 1 列和第 2 列(我们称它们为 C1 和 C2)将得到向量 [0 -2 0 0](转置)。这样我就可以得出成对的 C1 AND C2、C1 OR C2 和 C1 XOR C2 等。或者我可以将矩阵中的值更改为零和一,并直接应用逻辑运算符。但要让它发挥作用,关键是要有一种方法来比较所有列对。谢谢!
-
目前我所做的是从矩阵中获取列并将这些列与我正在比较的列右侧的所有列的子矩阵进行比较(这是因为在比较 C1 和 C3 之后,我会不需要比较 C3 和 C1。所以好消息是很容易将向量与矩阵相加/减去/比较(numpy 理解您可能意味着让向量对每一列进行操作),但我没有看到方法摆脱列上的循环。
-
@RemcoNiggebrugge 您能否为给定输入添加所需输出的示例?
-
当然。上面的矩阵会给出一个很大的结果放在这里,所以一个小例子(我会添加它作为答案,因为我不能在这里添加富文本格式)
标签: python numpy matrix comparison-operators