Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更好地替代'numpy.moveaxis',用于跨错误定向的阵列进行广播_Python_Arrays_Numpy_Array Broadcasting - Fatal编程技术网

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)广播