[英]Efficient way to compute distance matrix in NumPy
我有這個示例數組:
In [38]: arr
Out[38]: array([ 0, 44, 121, 154, 191])
以上只是一個示例,而我的實際數組大小非常大。 那么,什么是計算距離矩陣的有效方法?
結果應該是:
In [41]: res
Out[41]:
array([[ 0, 44, 121, 154, 191],
[ -44, 0, 77, 110, 147],
[-121, -77, 0, 33, 70],
[-154, -110, -33, 0, 37],
[-191, -147, -70, -37, 0]])
我寫了一個基於for
循環的實現,這個實現太慢了。 出於效率原因,這可以進行矢量化嗎?
你可以使用廣播 :
from numpy import array
arr = array([ 0, 44, 121, 154, 191])
arrM = arr.reshape(1, len(arr))
res = arrM - arrM.T
有subtract
。 outer
,有效地執行兩個數組之間的廣播減法。
將ufunc
op
應用於所有對(a,b),其中A和B在B中。設M = A.ndim,N = B.ndim。 那么
op.outer(A, B)
的結果C是一個維數為M + N的數組,這樣:C[i_0, ..., i_{M-1}, j_0, ..., j_{N-1}] = op(A[i_0, ..., i_{M-1}],B[j_0, ..., j_{N-1}])
np.subtract.outer(arr, arr).T
要么,
arr - arr[:, None] # essentially the same thing as above
array([[ 0, 44, 121, 154, 191],
[ -44, 0, 77, 110, 147],
[-121, -77, 0, 33, 70],
[-154, -110, -33, 0, 37],
[-191, -147, -70, -37, 0]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.