[問題] numpy broadcasting加速

作者: goldflower (金色小黃花)   2018-04-12 23:59:33
首先我有兩個2D矩陣
A: m x 128
B: n x 128
m, n大約10000左右
我其中有一部分運算會使用到
np.subtract(A[i, :], B) 此產生出n x 128的矩陣
而這個運算A的每個row都要做, 也就是做m次
最直觀就是使用for迴圈跑m次
但是因為太慢了所以想起來有個broadcasting可用
直接np.subtract(A, B[:, None])就好, 產生個3D tensor
但問題在於這個居然比for迴圈還要緩慢 而且是顯著慢很多
不知道這種運算有沒有更快速的解法
本來猜可以用vectorize
但是查doc發現"The implementation is essentially a for loop"這句話
所以可能也沒用? 我姑且試寫了一下目前是error 還沒搞熟這個XD
不知道有沒有人知道怎麼樣讓這個過程變快
大絕應該就是直接開multi-process吧 希望有更好的選擇@@
感謝收看
作者: brahmsliu (薛丁格的貓)   2018-04-13 08:17:00
np.apply_along_axis?
作者: niki25672729 (王采)   2018-04-13 10:59:00
我之前使用vectorize感覺起來是平行的耶 把值印出來並不會照原本array的順序 原來是for loop嗎樓上那個應該是for loop 我試驗的結果跟vectorize效率差很多
作者: ThxThx (洗洗睡)   2018-04-13 12:55:00
我記得subtraction的ufunc已經是有optimized過了!?可以用batch的方式丟進GPU來算使用mp會有多次data copy的overhead我覺得不划算

Links booklink

Contact Us: admin [ a t ] ucptt.com