使用掩码沿Numpy 4D阵列沿所有零删除空元素



给定样品numpy阵列,如:

a = np.array([[[[0,0,0], [0,0,0], [0,0,0]],
               [[0,0,0], [0,0,0], [0,0,0]]],
              [[[0,1,2], [1,1,1], [1,1,1]],
               [[1,1,1], [1,2,2], [1,1,1]]],
              [[[0,1,2], [1,1,1], [1,1,1]],
               [[1,1,1], [1,2,2], [1,1,1]]],
              [[[0,1,2], [1,1,1], [1,1,1]],
               [[1,1,1], [1,2,2], [1,1,1]]]])
#a.shape = (4, 2, 3, 3)

考虑到第一个元素是所有零,我如何才能返回具有形状(3,2,3,3(的Numpy阵列(3,2,3,3(?我的数据集是形状(m,x,y,z(的较大数据集,我需要返回非零(m-n,x,y,z(阵列,其中n为(x,y,z(形状阵列与所有零一起。

到目前为止,我尝试过:

mask = np.equal(a, np.zeros(shape=(2,3,3)))
'''
Returns:
        [[[[ True  True  True]
   [ True  True  True]
   [ True  True  True]]
  [[ True  True  True]
   [ True  True  True]
   [ True  True  True]]]

 [[[ True False False]
   [False False False]
   [False False False]]
  [[False False False]
   [False False False]
   [False False False]]]

 [[[ True False False]
   [False False False]
   [False False False]]
  [[False False False]
   [False False False]
   [False False False]]]

 [[[ True False False]
   [False False False]
   [False False False]]
  [[False False False]
   [False False False]
   [False False False]]]]
'''

但是应用a[~mask]给了我一个扁平的数组:

[1 2 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 2 1
 1 1 1 1 1 1 1 1 1 2 2 1 1 1] (51,)

我需要的就是这样:

np.array([[[[0,1,2], [1,1,1], [1,1,1]],
           [[1,1,1], [1,2,2], [1,1,1]]],
          [[[0,1,2], [1,1,1], [1,1,1]],
           [[1,1,1], [1,2,2], [1,1,1]]],
          [[[0,1,2], [1,1,1], [1,1,1]],
           [[1,1,1], [1,2,2], [1,1,1]]]])

奖金:我需要将其应用于单独的/镜像(M,X,Y,Z(形数组,所以也许我需要蒙版的方法?

在第一个轴以外的轴上使用 all来创建布尔数组以进行索引:

a[~(a == 0).all(axis=(1,2,3))]
#array([[[[0, 1, 2],
#         [1, 1, 1],
#         [1, 1, 1]],
#        [[1, 1, 1],
#         [1, 2, 2],
#         [1, 1, 1]]],

#       [[[0, 1, 2],
#         [1, 1, 1],
#         [1, 1, 1]],
#        [[1, 1, 1],
#         [1, 2, 2],
#         [1, 1, 1]]],

#       [[[0, 1, 2],
#         [1, 1, 1],
#         [1, 1, 1]],
#        [[1, 1, 1],
#         [1, 2, 2],
#         [1, 1, 1]]]])

相关内容

  • 没有找到相关文章

最新更新