按给定条件提取 numpy 行

hik*_*ker 2 python numpy

我有如下的 numpy 数组。

import numpy as np


data = np.array([[0,0,0,4],
                [3,0,5,0],
                 [8,9,5,3]])

print (data)
Run Code Online (Sandbox Code Playgroud)

我必须只提取前三个元素不全为零的那些行,预期结果如下:

result = np.array([[3,0,5,0],
                 [8,9,5,3]])
Run Code Online (Sandbox Code Playgroud)

我试过:

res = [l for l in data if l[:3].sum() !=0]
print (res)
Run Code Online (Sandbox Code Playgroud)

它给出了结果。但是,正在寻找更好的、麻木的方法。

Mad*_*ist 5

sum如果您的数组可以包含负数,则有点不可靠,但any始终有效:

result = data[data[:, :3].any(1)]
Run Code Online (Sandbox Code Playgroud)