Vir*_*uoz 7 python numpy vectorization
令X为M×N矩阵.将xi表示为X的第i列.我想创建由M×M矩阵组成的3维N×M×M阵列xi.dot(xi.T)
.
我怎么能用numpy最优雅地做到这一点?是否可以仅使用矩阵运算,没有循环?
Div*_*kar 10
一种方法broadcasting
-
X.T[:,:,None]*X.T[:,None]
Run Code Online (Sandbox Code Playgroud)
另一个与之broadcasting
交换的轴 - 之后 -
(X[:,None,:]*X).swapaxes(0,2)
Run Code Online (Sandbox Code Playgroud)
另一个与broadcasting
之后的多维转置 -
(X[:,None,:]*X).T
Run Code Online (Sandbox Code Playgroud)
另一种方法np.einsum
,如果从循环代码转换,可能就迭代器而言更直观的思考 -
np.einsum('ij,kj->jik',X,X)
Run Code Online (Sandbox Code Playgroud)
所有这些方法的基本思想是我们展开最后一个轴,使元素相乘相互保持第一轴对齐.我们通过扩展到两个数组版本实现了相互对立的过程.X
3D
归档时间: |
|
查看次数: |
1300 次 |
最近记录: |