我有两个数组:
a = [[a11,a12],
[a21,a22]]
b = [[b11,b12],
[b21,b22]]
我想要做的是建立一个矩阵如下:
xx = np.mean(a[:,0]*b[:,0])
xy = np.mean(a[:,0]*b[:,1])
yx = np.mean(a[:,1]*b[:,0])
yy = np.mean(a[:,1]*b[:,1])
并返回一个数组c,使
c = [[xx,xy],
yx,yy]]
在numpy中有一种不错的pythonic方法吗?因为目前我完全按照手工完成,所以输出数组的尺寸是手工编码的,而不是根据输入数组a和b的大小确定的。
答案 0 :(得分:3)
你的第三个元素是否有错误?如果您认为yx = np.mean(a[:,1]*b[:,0])
而不是yx = np.mean(b[:,1]*a[:,0])
似乎是合理的,那么您可以尝试以下方法:
a = np.random.rand(2, 2)
b = np.random.rand(2, 2)
>>> c
array([[ 0.26951488, 0.19019219],
[ 0.31008754, 0.1793523 ]])
>>> np.mean(a.T[:, None, :]*b.T, axis=-1)
array([[ 0.26951488, 0.19019219],
[ 0.31008754, 0.1793523 ]])
实际上,避免中间数组并将结果表示为矩阵乘法实际上会更快:
>>> np.dot(a.T, b) / a.shape[0]
array([[ 0.26951488, 0.19019219],
[ 0.31008754, 0.1793523 ]])