我在多维数组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)
答案 0 :(得分:2)
你得到的是一维数组,因为你没有为np.delete
提供 axis 参数,根据文档:
如果
axis
为无,则obj
将应用于展平数组。
除了在删除元素时循环遍历数组不是一个好主意,这使得很难跟踪索引,因为对象的大小正在改变:
对于你的情况:
masks = masks[masks.sum(axis=(1,2,3)) != 0]
应删除轴 1,2,3 的所有值之和为零的数组。