假设我们有两个矩阵A和B.
A具有形状(r,k),B具有形状(r,l)。
现在我想计算每行这两个矩阵的np.outer乘积。在外部产品之后,我想要对轴0中的所有值求和。所以我的结果矩阵应该具有形状(k,l)。
例如为: A的形式是(4,2),B的形式是(4,3)。
import numpy as np
A = np.array([[0, 7], [4, 1], [0, 2], [0, 5]])
B = np.array([[9, 7, 7], [6, 7, 5], [2, 7, 9], [6, 9, 7]])
# This is the first outer product for the first values of A and B
print(np.outer(A[0], B[0])) # This will give me
# First possibility is to use list comprehension and then
sum1 = np.sum((np.outer(x, y) for x, y in zip(A, B)), axis=0)
# Second possibility would be to use the reduce function
sum2 = reduce(lambda sum, (x, y): sum+np.outer(x, y), zip(A, B), np.zeros((A.shape[1], B.shape[1])))
# result for sum1 or sum2 looks like this:
# array([[ 175., 156., 133.], [ 133., 131., 137.]])
我问自己,有更好或更快的解决方案吗?因为当我有例如两个超过10,000行的矩阵需要一些时间。
只使用np.outer函数不是解决方案,因为np.outer(A,B)会给我一个形状矩阵(8,12)(这不是我想要的)。
需要这个用于神经网络反向传播。