如何解决Numpy:沿特定轴的外和
我正在寻找一种对二维矩阵列进行外部求和的有效方法。
假设 A 是一个 (2,3) 矩阵,我想要的结果是 (3,2,2) 的形状并定义为:
A = np.array([[a11,a12,a13],[a21,a22,a23]])
myWantedResult = np.array( [[[a11+a11,a11+a21],[a21+a11,a21+a21]],# This is the np.add.outer(A[:,0],A[:,0])
[[a12+a12,a12+a22 ],[a22+a12,a22+a22]],1],1])
[[a13+a13,a13+a23],[a23+a13,a23+a23]]# This is the np.add.outer(A[:,2],2])
])
我已经尝试过遍历该列,但它非常耗时,因为我想在大数组上执行此操作。 我正在寻找矢量化解决方案。
非常感谢!
解决方法
通过将 A
添加到形状为 A
的 (2,1,3)
的重构版本,可以通过广播来完成外部添加。可以通过多种方式进行重塑,包括 A[:,None,:]
、A.reshape((2,3))
或 np.expand_dims(A,1)
。然后 A + A[:,:]
包含您想要的结果,但形状是 (2,2,3)
。您可以使用 np.moveaxis
重新排列轴,使形状为 (3,2)
。
In [174]: A
Out[174]:
array([[ 1,10,100],[-25,50,500]])
In [175]: B = np.moveaxis(A + A[:,:],-1,0)
In [176]: B.shape
Out[176]: (3,2)
In [177]: B
Out[177]:
array([[[ 2,-24],[ -24,-50]],[[ 20,60],[ 60,100]],[[ 200,600],[ 600,1000]]])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。