我有一個一個維數組矩陣,讓說:如何構建在numpy的向量的所有可能存在差異
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循環來完成,但有沒有更好的方法來做到這一點?
我有一個一個維數組矩陣,讓說:如何構建在numpy的向量的所有可能存在差異
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
。當你減去一維數組,它們都廣播nxn
:
array([[ 1, 1, 1],
[ 2, 2, 2],
[ 3, 3, 3]])
和
array([[ 1, 2, 3],
[ 1, 2, 3],
[ 1, 2, 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])
您好,感謝的答案和解釋,但是你能點我一些參考解釋從nx1擴展到nxn。這有點神祕。另外我怎麼知道減法是按列進行的。謝謝 – user3176500 2014-09-26 08:31:14
@ user3176500我想這是不正確的說減法是按列或按行,請參閱編輯。有關規則的簡短說明,請查看[本教程](http://wiki.scipy.org/Tentative_NumPy_Tutorial#head-c533fb9a3f1aa90d96e4d8329c1c2f975474c8bf)。 – 2014-09-26 08:39:17
對不起,錯過了「它們都播放到nxn」。當然,減法是按照元素進行的。再次感謝 – user3176500 2014-09-26 08:43:55