Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按给定条件提取numpy行_Python_Numpy - Fatal编程技术网

Python 按给定条件提取numpy行

Python 按给定条件提取numpy行,python,numpy,Python,Numpy,我有如下numpy数组 import numpy as np data = np.array([[0,0,0,4], [3,0,5,0], [8,9,5,3]]) print (data) 我必须只提取前三个元素不全为零的行 预期结果如下: result = np.array([[3,0,5,0], [8,9,5,3]]) 我试着: res = [l for l in data if l

我有如下numpy数组

import numpy as np


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

print (data)
我必须只提取前三个元素不全为零的行 预期结果如下:

result = np.array([[3,0,5,0],
                 [8,9,5,3]])
我试着:

res = [l for l in data if l[:3].sum() !=0]
print (res)

它给出了结果。但是,要寻找更好、更简单的方法。如果数组可以包含负数,那么求和就有点不可靠,但是任何一个都可以:

result = data[data[:, :3].any(1)]
你说

前三个元素并不都是零

因此,解决办法是

将numpy导入为np
data=np.数组([[0,0,0,4],
[3,0,5,0],
[8,9,5,3]])
数据[~np.all(数据[:,:3]==0,轴=1),:]

我将尝试通过我的答案来解释我是如何看待这些问题的

第一步:定义一个函数,该函数返回一个布尔值,指示这是否是一个好的行。 为此,我使用np.any,它检查是否有任何条目为“True”(对于整数,True为非零)

第二步:我在所有行上应用它,并获得一个掩蔽向量。为此,可以在“np.any”中使用“axis”关键字,它将根据axis值对列或行应用该关键字

np.any(data[:, :3], axis=1)
Out[32]: array([False,  True,  True])
最后一步:我将其与索引结合起来,将其全部打包

rows_inds = np.any(data[:, :3], axis=1)
data[rows_inds]
Out[37]: 
array([[3, 0, 5, 0],
       [8, 9, 5, 3]])

是的,正在寻找numpy方式……“并非全部”是“任何”,包含更多步骤和临时数组
rows_inds = np.any(data[:, :3], axis=1)
data[rows_inds]
Out[37]: 
array([[3, 0, 5, 0],
       [8, 9, 5, 3]])