【发布时间】:2015-03-16 15:59:23
【问题描述】:
我想计算矩阵列之间所有可能的成对差异(不重复)。什么是有效的/pythonic 方式来做到这一点?
mat = np.random.normal(size=(10, 3))
mat
array([[ 1.57921282, 0.76743473, -0.46947439],
[ 0.54256004, -0.46341769, -0.46572975],
[ 0.24196227, -1.91328024, -1.72491783],
[-0.56228753, -1.01283112, 0.31424733],
[-0.90802408, -1.4123037 , 1.46564877],
[-0.2257763 , 0.0675282 , -1.42474819],
[-0.54438272, 0.11092259, -1.15099358],
[ 0.37569802, -0.60063869, -0.29169375],
[-0.60170661, 1.85227818, -0.01349722],
[-1.05771093, 0.82254491, -1.22084365]])
在这个矩阵中有 3 个成对的差异(N 选择 k 个唯一的组合,其中顺序无关紧要)。
pair_a = mat[:, 0] - mat[:, 1]
pair_b = mat[:, 0] - mat[:, 2]
pair_c = mat[:, 1] - mat[:, 2]
是一种(丑陋的)方式。你可以很容易地想象使用嵌套的for 循环来处理更大的矩阵,但我希望有更好的方法。
我希望结果是另一个矩阵,包含scipy.misc.comb(mat.shape[1], 2) 列和mat.shape[0] 行。
【问题讨论】: