python - 从数组中删除所有零

标签 python arrays python-2.7 numpy

我有一个形状为 [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/

相关文章:

python - Snakemake:如何防止不明确的规则同时被执行?

java - 在java中打印使用long[]构建的数组

python - 将文本字符串放入列表

python - 了解 export_graphviz 的决策树输出

python - 查找列表中最大的匹配项

python - 使用Python,当输入字符串为aaabbcddddd时,如何将输出字符串打印为-> aaa3bb2c1ddddd5

ruby - 在 ruby​​ 中对数组进行排序的最简单代码?

python - 从嵌套列表的字典理解返回字典

python - django - QuerySet 递归排序方法

java - Java 二维数组上的冒泡排序