使用numpy的优秀广播规则,您可以从形状(5,3)数组X中减去形状(3,)数组v
X - v
结果是形状(5,3)数组,其中每行i是差X [i] -v.
有没有办法从X中减去一个形状(n,3)数组w,以便从整个数组X中减去w的每一行而不显式使用循环?
解决方法
您需要使用
None/np.newaxis
扩展X的尺寸以形成3D阵列,然后通过w进行减法.这将使
broadcasting
在这个3D操作中发挥作用并产生形状为(5,n,3)的输出.实现看起来像这样 –
X[:,None] - w # or X[:,np.newaxis] - w
相反,如果所需的排序是(n,5,3),那么你需要扩展w的维度,就像这样 –
X - w[:,None] # or X - w[:,np.newaxis]
样品运行 –
In [39]: X Out[39]: array([[5,4],[8,1,8],[0,5],3,1],[6,2,5]]) In [40]: w Out[40]: array([[8,[7,8,6]]) In [41]: (X[:,None] - w).shape Out[41]: (5,3) In [42]: (X - w[:,None]).shape Out[42]: (2,3)