Python ND数组中的Numpy 1D数组操作

Python ND数组中的Numpy 1D数组操作,python,arrays,numpy,numpy-ndarray,Python,Arrays,Numpy,Numpy Ndarray,假设我们有一个形状为n,m,g,h的4D数组a和形状为n的1D数组B 所以我想对每一个3D子数组,m,g,h,进行幂运算,每个元素都是int A = np.arange(24).reshape(3, 2, 2, 2) >>>array([[[[ 0, 1], [ 2, 3]], [[ 4, 5], [ 6, 7]]], [[[ 8, 9], [10, 11]],

假设我们有一个形状为n,m,g,h的4D数组a和形状为n的1D数组B

所以我想对每一个3D子数组,m,g,h,进行幂运算,每个元素都是int

A = np.arange(24).reshape(3, 2, 2, 2)
>>>array([[[[ 0,  1],
         [ 2,  3]],

        [[ 4,  5],
         [ 6,  7]]],


       [[[ 8,  9],
         [10, 11]],

        [[12, 13],
         [14, 15]]],


       [[[16, 17],
         [18, 19]],

        [[20, 21],
         [22, 23]]]]
B = np.arange(3)
>>>array([0, 1, 2])
我想要的结果是:

C = somefunc(A, B) # just an example, can be anything
>>>array([[[[ (ignore, 0^0),  1],
         [ 1,  1]],

        [[ 1,  1],
         [ 1,  1]]],


       [[[ 8,  9],
         [10, 11]],

        [[12, 13],
         [14, 15]]],


       [[[256, 289],
         [324, 361]],

        [[400, 441],
         [484, 529]]]]
获得预期结果的最佳方法是什么

我想到了这样的事情:

A = [np.power(A[i, :, :, :], B[i]) for i in range(B.size)]
但如果B.size是一个大数字,那么这将是非常低效的。还有其他想法吗?

这将起作用:

C = A ** B[:,None,None,None]
print (C)
输出:

A=[np.powerA[i,:,,:,:],b在b中的效率是什么?即使b是大的,a**b也是必要的。np.powerA,b[:,None,None,None]-也就是说,扩展b的维度,使其以a.或a.T**b.T广播。
[[[[  1   1]
   [  1   1]]

  [[  1   1]
   [  1   1]]]


 [[[  8   9]
   [ 10  11]]

  [[ 12  13]
   [ 14  15]]]


 [[[256 289]
   [324 361]]

  [[400 441]
   [484 529]]]]