为了重构我的部分代码,我想通过沿着给定的维度堆叠向量/矩阵来对一些矩阵乘法进行向量化。基本上,我想在下面的代码中摆脱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的初学者,如果这很简单,我道歉:)
2条答案
按热度按时间htrmnn0y1#
将新轴添加到
vector
,然后沿着axis
进行乘法和求和:62o28rlo2#
写数学会有帮助我猜你想计算
∑ v M v
在这个表达式中,你收缩了两个索引(j,k)而不是i。所以你可以很容易地使用
np.eigen
: