Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.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 二维和三维阵列之间的点积_Python_Numpy_Vectorization - Fatal编程技术网

Python 二维和三维阵列之间的点积

Python 二维和三维阵列之间的点积,python,numpy,vectorization,Python,Numpy,Vectorization,假设我有两个数组V和Q,其中V是(I,j,j),而Q是(j,j)。现在我想计算Q与V的每一行的点积,并将结果保存为(I,j,j)大小的矩阵。使用for循环很容易做到这一点,只需像这样在i上迭代即可 import numpy as np v = np.random.normal(size=(100, 5, 5)) q = np.random.normal(size=(5, 5)) output = np.zeros_like(v) for i in range(v.shape[0]):

假设我有两个数组
V
Q
,其中
V
(I,j,j)
,而
Q
(j,j)
。现在我想计算
Q
V
的每一行的点积,并将结果保存为
(I,j,j)
大小的矩阵。使用for循环很容易做到这一点,只需像这样在
i
上迭代即可

import numpy as np

v = np.random.normal(size=(100, 5, 5))
q = np.random.normal(size=(5, 5))
output = np.zeros_like(v)

for i in range(v.shape[0]):
    output[i] = q.dot(v[i])
然而,这对于我的需要来说太慢了,我猜有一种方法可以使用
einsum
tensordot
来对这个操作进行矢量化,但我还没有找到它。有人能给我指一下正确的方向吗?谢谢

您当然可以使用,但以后需要交换轴,就像这样-

out = np.tensordot(v,q,axes=(1,1)).swapaxes(1,2)
out = np.einsum('ijk,lj->ilk',v,q)
有了它,就更直截了当了,就像这样-

out = np.tensordot(v,q,axes=(1,1)).swapaxes(1,2)
out = np.einsum('ijk,lj->ilk',v,q)