1
我有如下形式的函數來實現在numpy的這個功能高效求和外積爲1D NumPy的陣列
的一種方式是組裝矩陣來總結以上:
y = a*b - np.sum(np.outer(a*b, b), axis=0)
有沒有更好的方法來實現這個函數與numpy,不涉及創建一個NxN數組?
我有如下形式的函數來實現在numpy的這個功能高效求和外積爲1D NumPy的陣列
的一種方式是組裝矩陣來總結以上:
y = a*b - np.sum(np.outer(a*b, b), axis=0)
有沒有更好的方法來實現這個函數與numpy,不涉及創建一個NxN數組?
你可以使用np.einsum
-
y = a*b - np.einsum('i,i,j->j',a,b,b)
我們也可以執行a*b
和飼料到einsum
-
y = a*b - np.einsum('i,j->j',a*b,b)
在第二種方法,我們可以通過存儲a*b
和重用節省一些運行。
運行測試 -
In [253]: a = np.random.rand(4000)
In [254]: b = np.random.rand(4000)
In [255]: %timeit np.sum(np.outer(a*b, b), axis=0)
10 loops, best of 3: 105 ms per loop
In [256]: %timeit np.einsum('i,i,j->j',a,b,b)
10 loops, best of 3: 24.2 ms per loop
In [257]: %timeit np.einsum('i,j->j',a*b,b)
10 loops, best of 3: 21.9 ms per loop
@reptilicus這是形容它的最佳方式! :) – Divakar
銖,我的評論被刪除。唉,審查員有我的號碼 – reptilicus
@reptilicus哈哈,可能有一些孩子AI-bot在工作;) – Divakar