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

Python 如何在numpy中构造向量所有可能差的矩阵,python,numpy,array-difference,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循环来完成,但是有没有更优雅的方法来实现这一点呢?这似乎是可行的: In [1]: %paste import numpy as np inp_vec = np.array([1, 2, 3]) ## -- End pa

我有一个一维数组,比如说:

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循环来完成,但是有没有更优雅的方法来实现这一点呢?

这似乎是可行的:

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]])

然后按元素进行减法运算,从而得到所需的结果

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]])

这也是我找到的一个好方法:

np.subtract.outer([1,2,3], [1,2,3])
使用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]])

您好,谢谢您的回答和解释,但是您能给我指一些解释从nx1扩展到nxn的参考资料吗。这有点神秘。还有,我如何知道减法是按列进行的。Thanks@user3176500我想说减法是按列或按行进行的并不正确,请参见编辑。有关规则的简短解释,请检查。抱歉,错过了“它们都广播到nxn”。当然,减法是按元素进行的。谢谢again@user3176500你没有错过,我编辑了答案以回应你的评论:)很高兴能帮上忙。
array([[ 0, -1, -2],
       [ 1,  0, -1],
       [ 2,  1,  0]])