numpy 沿着给定向量的向量化矩阵乘法

7d7tgy0s  于 2023-04-21  发布在  其他
关注(0)|答案(2)|浏览(140)

为了重构我的部分代码,我想通过沿着给定的维度堆叠向量/矩阵来对一些矩阵乘法进行向量化。基本上,我想在下面的代码中摆脱for循环:

import numpy as np

test1 = np.array([1,2,3,4]).reshape(4,1)
test2 = np.array([5,6,7,8]).reshape(4,1)

vector = np.concatenate([test1, test2], axis=1)

matrix = np.zeros((2,2,4))
matrix[0,0,:] = np.ones((4,))
matrix[1,1,:] = np.ones((4,))*0.5

result = np.zeros(4)
for i in range(4):
    result[i] = vector[i,:] @ matrix[:,:,i] @ vector[i,:]

我尝试使用np.dot,但我无法正确匹配输入形状。我希望最后(对于上述代码)长度为4的向量。我是Python的初学者,如果这很简单,我道歉:)

htrmnn0y

htrmnn0y1#

将新轴添加到vector,然后沿着axis进行乘法和求和:

vector_temp =vector[:,:,np.newaxis]

multi = vector_temp * matrix.T *vector_temp

result_temp = np.sum(np.sum(multi, axis=1), axis=1)
62o28rlo

62o28rlo2#

写数学会有帮助我猜你想计算
∑ v M v
在这个表达式中,你收缩了两个索引(j,k)而不是i。所以你可以很容易地使用np.eigen

np.einsum('ij,jki,ik->i', vector, matrix, vector)

相关问题