我有一个一维数组,让我们说:
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循环来完成,但有更优雅的方法吗?
答案 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]])