首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >乘矩阵A乘以多维矩阵“矩阵向?”

乘矩阵A乘以多维矩阵“矩阵向?”
EN

Stack Overflow用户
提问于 2015-06-05 19:44:55
回答 1查看 69关注 0票数 2

我有一个三维的numpy数组u,shape (k,m,n),并且我试图计算一个新的数组连根-- shape (k,m,n),使得fixed = np.dot(A,uj),其中A是一个完全不依赖j的固定矩阵。我可以轻松地在最内部的索引上编写一个循环,但是有更快/更好的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-05 20:10:02

np.einsum可以完成以下工作:

代码语言:javascript
复制
result = numpy.einsum('ij,kjl->kil', A, u)

您也可以让它广播,所以如果XY被认为是2D矩阵的数组,下面的调用将执行适当的广播dot

代码语言:javascript
复制
result = numpy.einsum('...ij,...jk->...ik', X, Y)

例如,如果X具有(3, 4, 5, 6)形状,而Y具有形状(4, 6, 5),那么result[1, 2]将是一个形状(5, 5)数组,等于X[1, 2].dot(Y[2])

您也可以使用dot来完成这一任务。A.dot(u)使用A.dot(u)[i, j, k] == A[i, :].dot(u[j, :, k)生成一个结果数组。您需要一个带有result[i, j, k] == A[j, :].dot(u[i, :, k])的结果数组;您可以使用rollaxis或带有axes参数的transpose实现这一点。

代码语言:javascript
复制
result = numpy.rollaxis(A.dot(u), 1)

einsum使广播变得容易的地方,用于高维输入的dot就像是一种外部产品.使用与前面相同的XY,如果设置

代码语言:javascript
复制
result = numpy.rollaxis(X.dot(Y), axis=X.ndim-2, start=X.ndim+Y.ndim-3)

然后result[1, 2, 3]将是一个形状(5, 5)的数组,该数组的形状与X[1, 2].dot(Y[3])相等。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30674587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档