根据条件选择多个行

时间:2019-09-24 11:15:50

标签: python arrays numpy matrix

我正在尝试使用numpy从二维数组中删除行,其中该行的第一个值(因此索引为0的元素)与某个条件不匹配。

我能够使用两个循环使用常规python来执行此操作,但是我想使用numpy来更有效地执行此操作,例如与numpy.where

我一直在尝试使用numpy.wherenumpy.delete进行各种操作,但是我很难接受这样一个事实,即我想通过使用仅需要由第一个元素验证而不是由第一个元素验证的条件来选择行第二个(我不在乎第二个元素的值)

这里是一个示例,其中我只想保留每行的第一个值为6的行。

输入:

[[0,4],
[0,5],
[3,5],
[6,8],
[9,1],
[6,1]]

输出:

[[6,8],
[6,1]]

2 个答案:

答案 0 :(得分:4)

使用布尔掩码:

mask = z[:, 0] == 6
z[mask, :]

这比np.where更有效率,因为您可以直接使用布尔掩码,而无需先将其转换为索引数组的开销。

一个班轮:

z[z[:,0]==6, :]

答案 1 :(得分:0)

程序:

import numpy as np
np_array = np.array([[0,4],[0,5],[3,5],[6,8],[9,1],[6,1]])
rows=np.where(np_array[:,0]==6)
print(np_array[rows])

输出:

[[6 8]
 [6 1]]

如果要进入二维列表 使用

np_array[rows].tolist()

2d列表的输出

[[6, 8], [6, 1]]