对于python矩阵M(使用numpy),如何将该矩阵的每一列与所有其他列进行比较?

对于python矩阵M(使用numpy),如何将该矩阵的每一列与所有其他列进行比较?,python,numpy,matrix,comparison-operators,Python,Numpy,Matrix,Comparison Operators,我想看看是否有一种方法可以在不使用循环的情况下将矩阵的一列与同一矩阵的所有其他列进行比较。显然,结果可能非常大,对于[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

我想看看是否有一种方法可以在不使用循环的情况下将矩阵的一列与同一矩阵的所有其他列进行比较。显然,结果可能非常大,对于[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列+矩阵]


它迅速变大了。有很多重复,例如,我不需要将一列添加到自身中,也不需要将每一列与所有其他列进行比较,但使用列号较高的所有列(在右侧)会更好。也许像上面的例子那样更容易实现它。也许这是不可能的!我可以想象这是一种能迅速吸收所有可用内存的函数

我不知道你的问题解决方案是否有内在的机制。但是我有些东西可能对你有帮助

import numpy as np
a = np.random.random_integers(0,6,(300,300))
b = np.random.random_integers(0,6,(300,300))

for i in xrange(300):
    a = np.roll(a, 1, axis=a)
    ###Do whatever you want to do with a and b
这里将生成矩阵a的所有组合,以便您可以根据自己的使用情况使用它

您不想使用循环可能是因为时间效率。但由于numpy改进了库,这将更快地工作

我第一次在StackOverflow上写下答案。所以,如果你发现这是错误的,那么对不起


参考资料:

你到底在比较什么,一列和一列在同一位置?是的,以最简单的形式,我只想添加列。将第1列与第2列(我们称之为C1和C2)进行比较,将得到向量[0-2 0 0](转置)。因此,我可以得出成对的C1和C2,C1或C2和C1异或C2,等等。或者,我可以将矩阵中的值更改为0和1,并直接应用逻辑运算符。但对于它的工作至关重要的是,要有一种方法来比较所有的列对。谢谢现在我要做的是从矩阵中选取列,并将它们与我要比较的列右边的所有列的子矩阵进行比较(这是因为在比较之后,比如说,C1和C3,我不需要比较C3和C1。所以好消息是,向量和矩阵的加/减/比较很容易(numpy知道你可能想让向量对每一列进行运算),但我看不到一种方法可以消除列上的循环。@RemcoNiggebrugge你能为给定的输入添加所需输出的示例吗?当然。上面的矩阵将给出一个结果,让big放在这里,所以是一个小示例(我将其添加为答案,因为我无法在此处添加富文本格式)