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