[问题] 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