Python 更好地替代'numpy.moveaxis',用于跨错误定向的阵列进行广播
要求两个数组最右边维度的形状兼容。例如:Python 更好地替代'numpy.moveaxis',用于跨错误定向的阵列进行广播,python,arrays,numpy,array-broadcasting,Python,Arrays,Numpy,Array Broadcasting,要求两个数组最右边维度的形状兼容。例如: A (3d array): 15 x 3 x 5 B (2d array): 3 x 5 q = np.array( [ [0,0], [1,1], [2,2], [3,3], [4,4]] ) z = np.array( [ [1,2], [3,4], [5,6]] ) x = np.array( [ z, z+1, z+2, z+3, z+4] ) #x - q #ValueError: operands cou
A (3d array): 15 x 3 x 5
B (2d array): 3 x 5
q = np.array( [ [0,0], [1,1], [2,2], [3,3], [4,4]] )
z = np.array( [ [1,2], [3,4], [5,6]] )
x = np.array( [ z, z+1, z+2, z+3, z+4] )
#x - q #ValueError: operands could not be broadcast together with shapes (5,3,2) (5,2)
difference = np.moveaxis( np.moveaxis( x, -2, 0) - q, -2, 0)
np.all( np.equal( difference, [z, z, z, z, z]))
如果阵列A的维度与阵列B匹配,但顺序不正确,则可以在广播之前简单地重新排列维度:
A (3d array): 3 x 15 x 5
B (2d array): 3 x 5
np.moveaxis(A, -2, 0) (3d array): 15 x 3 x 5
但我想知道,在两个阵列之间没有正确定向的情况下,最好的广播方式是什么。例如:
A (3d array): 15 x 3 x 5
B (2d array): 3 x 5
q = np.array( [ [0,0], [1,1], [2,2], [3,3], [4,4]] )
z = np.array( [ [1,2], [3,4], [5,6]] )
x = np.array( [ z, z+1, z+2, z+3, z+4] )
#x - q #ValueError: operands could not be broadcast together with shapes (5,3,2) (5,2)
difference = np.moveaxis( np.moveaxis( x, -2, 0) - q, -2, 0)
np.all( np.equal( difference, [z, z, z, z, z]))
是否有更好的操作替代方案
np.moveaxis(np.moveaxis(x,-2,0)-q,-2,0)
?x-q[:,无,:]
应该这样做。(5,3,2)和(5,1,2)广播