簡體   English   中英

在NumPy中計算距離矩陣的有效方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM