遮罩多维数组-numpy

时间:2019-11-21 19:21:49

标签: arrays numpy multidimensional-array

我有两个大小为(2,3,2)的相同数组

[[[1, 7],
  [2, 8], 
  [3, 9]],

 [[4, 10],
  [5, 11],
  [6, 12]]]

存储在多维数组中

>>> a  =  np.array([[[[ 1,  1],
              [ 7,  7]],

             [[ 2,  2],
              [ 8,  8]],

             [[ 3,  3],
              [ 9,  9]]],

            [[[ 4,  4],
              [10, 10]],

             [[ 5,  5],
              [11, 11]],

             [[ 6,  6],
              [12, 12]]]])

>>> a.shape
(2, 3, 2, 2)

我正在尝试用a屏蔽m中的子数组:

>>> m  =  np.array([[[1, 0],
                 [0, 0],
                 [1, 1]],

                [[1, 1],
                 [0, 1],
                 [0, 0]]])

应导致:

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

   [ 0,  0],
   [ 0,  0],

   [ 3,  3],
   [ 9,  9]]

  [[ 4, 4],
   [10, 10],

   [ 0,  0],
   [11,  11],

   [ 0,  0],
   [ 0,  0]]]

我尝试使用np.concatenatenp.append,例如np.prod(np.concatenate([a,m],axis=0))

但我的解决方案均无效。

1 个答案:

答案 0 :(得分:2)

扩展m的尺寸,使其以a广播:

In [183]: a*m[...,None]                                                         
Out[183]: 
array([[[[ 1,  1],
         [ 0,  0]],

        [[ 0,  0],
         [ 0,  0]],

        [[ 3,  3],
         [ 9,  9]]],


       [[[ 4,  4],
         [10, 10]],

        [[ 0,  0],
         [11, 11]],

        [[ 0,  0],
         [ 0,  0]]]])