如何在numpy中构造一个向量的所有可能差异的矩阵

时间:2014-09-26 07:07:42

标签: python numpy array-difference

我有一个一维数组,让我们说:

import numpy as np
inp_vec = np.array([1, 2, 3])

现在,我想构建一个形式

的矩阵
m = [[0, 1-2, 1-3], [2-1, 0, 2-3], [3-1, 3-2, 0]]

当然可以用for循环来完成,但有更优雅的方法吗?

4 个答案:

答案 0 :(得分:3)

这似乎有效:

In [1]: %paste
import numpy as np
inp_vec = np.array([1, 2, 3])

## -- End pasted text --

In [2]: inp_vec.reshape(-1, 1) - inp_vec
Out[2]: 
array([[ 0, -1, -2],
       [ 1,  0, -1],
       [ 2,  1,  0]])

说明:

您首先将数组重塑为nx1。当您减去1D数组时,它们都会广播到nxn

array([[ 1,  1,  1],
       [ 2,  2,  2],
       [ 3,  3,  3]])

array([[ 1,  2,  3],
       [ 1,  2,  3],
       [ 1,  2,  3]])

然后逐个元素地进行减法,得到所需的结果。

答案 1 :(得分:3)

import numpy as np
inp_vec = np.array([1, 2, 3])

a, b = np.meshgrid(inp_vec, inp_vec)
print(b - a)

输出:

Array([[ 0 -1 -2],
       [ 1  0 -1],
       [ 2  1  0]])

答案 2 :(得分:3)

我也找到了一个很好的方法:

np.subtract.outer([1,2,3], [1,2,3])

答案 3 :(得分:0)

使用np.nexaxis

import numpy as np
inp_vec = np.array([1, 2, 3])

output = inp_vec[:, np.newaxis] - inp_vec

输出

array([[ 0, -1, -2],
       [ 1,  0, -1],
       [ 2,  1,  0]])