我在多维数组masks中具有一堆32 x 32灰度图像,如下所示:

(2560, 1, 32, 32)


如果我将它们的值相加,其中的某些图像将包含非零值。

我想从多维数组中删除那些值之和等于零的元素。

这就是我的处理方式:

for idx in range(masks.shape[0]):
    if np.sum(masks[idx]) == 0:
        masks = np.delete(masks, idx)


在第一次迭代中找到零和元素之后,masks的形状发生变化

(2560, 1, 32, 32)



(2621439,)

为什么会发生这种情况,我该如何解决?我所希望的只是减少第一维度,例如

(2120, 1, 32, 32)

最佳答案

根据文档,您得到一维数组,因为没有为np.delete提供轴参数:


  如果axis为None,则将obj应用于展平的数组。


此外,删除元素时循环遍历数组不是一个好主意,因为对象的大小在变化,因此很难跟踪索引:

对于您的情况:

masks = masks[masks.sum(axis=(1,2,3)) != 0]


应该删除轴1,2,3的所有值之和为零的数组。

关于python - 如何从值总和等于0的多维数组中删除元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43433222/

10-10 10:28