我有一个形状为 [120000, 3] 的数组,其中只有前 1500 个元素有用,其他元素为 0。
举个例子
[15.0, 14.0, 13.0]
[11.0, 7.0, 8.0]
[4.0, 1.0, 3.0]
[0.0, 0.0, 0.0]
[0.0, 0.0, 0.0]
[0.0, 0.0, 0.0]
[0.0, 0.0, 0.0]
我必须找到一种方法来删除所有 [0.0, 0.0, 0.0] 的元素。我试着写这个但是它不起作用
for point in points:
if point[0] == 0.0 and point[1] == 0.0 and point[2] == 0.0:
np.delete(points, point)
编辑
评论中的所有解决方案都有效,但我为我使用的解决方案打了绿色勾。感谢大家。
最佳答案
不要使用 for 循环——它们很慢。在 for 循环中重复调用 np.delete
会导致性能不佳。
相反,创建一个 mask :
zero_rows = (points == 0).all(1)
这是一个长度为 120000 的数组,当该行中的所有元素都为 0 时为 True。
然后找到第一个这样的行:
first_invalid = np.where(zero_rows)[0][0]
最后,对数组进行切片:
points[:first_invalid]
关于python - 从数组中删除所有零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52243734/