如何从多维数组中删除元素,其中值的总和等于0?

时间:2017-04-16 02:47:53

标签: python arrays python-3.x numpy multidimensional-array

我在多维数组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)

1 个答案:

答案 0 :(得分:2)

你得到的是一维数组,因为你没有为np.delete提供 axis 参数,根据文档:

  

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

除了在删除元素时循环遍历数组不是一个好主意,这使得很难跟踪索引,因为对象的大小正在改变:

对于你的情况:

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

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