我有一个由N个3x3数组组成的数组(一个矩阵集合,尽管数据类型是np.ndarray),我有一个由N个3x1数组组成的数组(一个向量集合)。我想做的是将每个矩阵乘以每个向量,所以我希望得到N个3x1数组。
简单的例子:
A = np.ones((6,3,3))
B = np.ones((6,3,1))
np.dot(A,B) # This gives me a 6x3x6x1 array, which is not what I want
np.array(map(np.dot,A,B)) # This gives me exactly what I want, but I don't want to have to rely on map
字符串
我已经尝试了各种整形,探索了einsum
等,但不能让它以我想要的方式工作。我如何让这个工作与numpy广播?这个操作最终将需要执行数千次,我不希望map
或列表解析操作减慢速度。
3条答案
按热度按时间7gyucuyw1#
您可以使用
np.einsum
来计算点积并创建所需形状的矩阵:字符串
pdtvr36n2#
可以使用Python 3.5或更高版本中的内置矩阵乘法,在PEP 465中引入。
字符串
nqwrtyyt3#
字符串
“allclose”是因为两种方法之间存在1 e-16量级的浮点舍入差异。
.swapaxis和[...,None]只是为了让数组符合您指定的形状。你也可以更简单地表示它:
型