python – 2D数组每列的外积,形成一个3D数组 – NumPy

python – 2D数组每列的外积,形成一个3D数组 – NumPy,第1张

概述令X为M×N矩阵.将xi表示为X的第i列.我想创建由M×M矩阵xi.dot(xi.T)组成的3维N×M×M阵列. 我怎么能用numpy最优雅地做到这一点?是否可以仅使用矩阵运算,没有循环? broadcasting的一种方法 – X.T[:,:,None]*X.T[:,None] 另一个有广播和交换轴后 – (X[:,None,:]*X).swapaxes(0,2) 另一个广播和之后的多维转置 – 令X为M×N矩阵.将xi表示为X的第i列.我想创建由M×M矩阵xi.dot(xi.T)组成的3维N×M×M阵列.

我怎么能用numpy最优雅地做到这一点?是否可以仅使用矩阵运算,没有循环?

解决方法 broadcasting的一种方法 –
X.T[:,:,None]*X.T[:,None]

另一个有广播和交换轴后 –

(X[:,None,:]*X).swapaxes(0,2)

另一个广播和之后的多维转置 –

(X[:,:]*X).T

使用np.einsum的另一种方法,如果从循环代码转换,可能就迭代器而言更直观的思考 –

np.einsum('ij,kj->jik',X,X)

所有这些方法的基本思想是我们展开最后一个轴,使元素相乘相互保持第一轴对齐.我们通过将X扩展到两个3D阵列版本来实现这种相互对立的过程.

总结

以上是内存溢出为你收集整理的python – 2D数组每列的外积,形成一个3D数组 – NumPy全部内容,希望文章能够帮你解决python – 2D数组每列的外积,形成一个3D数组 – NumPy所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1206612.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存