Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 可广播Numpy点_Python_Algorithm_Numpy_Matrix Multiplication_Blas - Fatal编程技术网

Python 可广播Numpy点

Python 可广播Numpy点,python,algorithm,numpy,matrix-multiplication,blas,Python,Algorithm,Numpy,Matrix Multiplication,Blas,我有一个维度数组H(n0,n2)和一个维度数组W(n0,n1,n2,n3),我想执行以下操作: (H[:, None, :, None] * W).sum(axis=(0, 2)) 据我所知,上面这一行没有使用BLAS库。有没有一种方法可以使用numpy.dot或类似的函数来使用BLAS进行相同的计算(并且仍然不在内存中多次复制数组H)?您已经确定了一种方法;我知道另外两个 举个小例子 In [365]: n0,n1,n2,n3=2,3,4,5 In [366]: H=np.ones((n0,

我有一个维度数组H(n0,n2)和一个维度数组W(n0,n1,n2,n3),我想执行以下操作:

(H[:, None, :, None] * W).sum(axis=(0, 2))

据我所知,上面这一行没有使用BLAS库。有没有一种方法可以使用
numpy.dot
或类似的函数来使用BLAS进行相同的计算(并且仍然不在内存中多次复制数组H)?

您已经确定了一种方法;我知道另外两个

举个小例子

In [365]: n0,n1,n2,n3=2,3,4,5
In [366]: H=np.ones((n0,n2));W=np.ones((n0,n1,n2,n3))
比较时间为:

In [362]: timeit np.tensordot(H,W,[(0,1),(0,2)])
10000 loops, best of 3: 32.8 µs per loop

In [363]: timeit np.einsum('ik,ijkl',H,W)
100000 loops, best of 3: 10.7 µs per loop

In [364]: timeit (H[:,None,:,None]*W).sum(axis=(0,2))
10000 loops, best of 3: 29.5 µs per loop
tensordot
对输入进行整形和转置,以便调用
np.dot
einsum
对字符串进行解码,并在C中执行自己的
nditer

具有另一个多维
点的计时,涉及
(100,)*(10100100)*(100,)
数组