繁体   English   中英

从 3d numpy 阵列中删除二维切片

[英]Remove 2d slice from 3d numpy array

我需要从 3D numpy 立方体中删除最后一个 arrays 。 我有:

a = np.array(
[[[1,2,3],
 [4,5,6],
 [7,8,9]],

[[9,8,7],
 [6,5,4],
 [3,2,1]],

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

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

如何使用np.delete删除具有零子阵列的 arrays ,例如在立方体的底部?

(我不能简单地删除所有零值,因为顶部的数据中会有零)

对于all立方体,您可以检查最后两个轴

a = np.asarray(a)
a[~(a==0).all((2,1))]

array([[[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]],

       [[9, 8, 7],
        [6, 5, 4],
        [3, 2, 1]]])

这是删除尾随全零切片的一种方法,正如我们希望将全零切片保留在顶部数据中的问题中所述 -

a[:-(a==0).all((1,2))[::-1].argmin()]

样品运行 -

In [80]: a
Out[80]: 
array([[[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]],

       [[9, 8, 7],
        [6, 5, 4],
        [3, 2, 1]],

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

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

In [81]: a[:-(a==0).all((1,2))[::-1].argmin()]
Out[81]: 
array([[[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]],

       [[9, 8, 7],
        [6, 5, 4],
        [3, 2, 1]]])

如果您知道它们已经在哪里,最简单的方法就是将它们切掉:

a[:-2]

结果是:

array([[[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]],

       [[9, 8, 7],
        [6, 5, 4],
        [3, 2, 1]]])

希望这可以帮助,

a_new=[] #Create a empty list
for item in a:
        if not (np.count_nonzero(item) == 0): #check if inner matrix is empty or not
            a_new.append(item) #appending to inner matrix to the list

a_new=np.array(a_new) #creating numpy matrix with removed zero elements

Output:

array([[[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]],

       [[9, 8, 7],
        [6, 5, 4],
        [3, 2, 1]]])

使用任何和 select :)

a=np.array([[[1,2,3],
 [4,5,6],
 [7,8,9]],

[[9,8,7],
 [6,5,4],
 [3,2,1]],

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

[[0,0,0],
 [0,0,0],
 [0,0,0]]])
a[a.any(axis=2).any(axis=1)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM