Numpy 如果列值满足特定条件,则选择行

Numpy 如果列值满足特定条件,则选择行,numpy,Numpy,给定一个numpy数组,我想对第二列高于/等于某个阈值的所有行进行切片。以下是我目前的尝试: import numpy as np #inp = input("Input N : ") #N = float(inp); N = 5 #ids = np.arange(1, N+1, 1) #scores = np.random.uniform(low=2.0, high=6.0, size=(N,)) ids = [ 1., 2., 3.,

给定一个
numpy
数组,我想对第二列高于/等于某个阈值的所有行进行切片。以下是我目前的尝试:

import numpy as np

#inp = input("Input N : ")
#N = float(inp);

N = 5

#ids = np.arange(1, N+1, 1)
#scores = np.random.uniform(low=2.0, high=6.0, size=(N,))

ids = [ 1.,          2.,          3.,          4.,          5.,        ]
scores = [ 3.75320381,  4.32400937,  2.43537978,  3.73691774,  2.5163266, ]

ids_col = ids.copy()
scores_col = scores.copy()

students_mat = np.column_stack([ids_col, scores_col])

accepted = scores_col[scores_col[:]>=4.0]

accepted_std = students_mat[:, accepted]

print(accepted_std)
错误

>>> (executing file "arrays.py")
Traceback (most recent call last):
  File "D:\I (Blank Space)\Python\arrays.py", line 19, in <module>
    accepted = scores_col[scores_col[:]>=4.0]
TypeError: '>=' not supported between instances of 'list' and 'float'

>>> 
>(正在执行文件“arrays.py”)
回溯(最近一次呼叫最后一次):
文件“D:\I(空白)\Python\arrays.py”,第19行,在
已接受=分数\列[分数\列[:]>=4.0]
TypeError:“>=”在“list”和“float”的实例之间不受支持
>>> 

要回答您的初始问题,您需要将
ID
分数定义为
np.array
。这将使您的代码正常工作,直到您尝试定义
accepted\u std

import numpy as np
N = 5

ids = np.array([1, 2, 3, 4, 5])
scores = np.array([3.75320381, 4.32400937, 2.43537978, 3.73691774,  2.5163266])

ids_col = ids.copy()
scores_col = scores.copy()

students_mat = np.column_stack([ids_col, scores_col])

accepted = scores_col[scores_col[:]>=4.0]

print(accepted)
我认为您实际想要的是获得
分数高于某个阈值的所有行。为此,您可以将代码更改为:

import numpy as np
N = 5

ids = np.array([1, 2, 3, 4, 5])
scores = np.array([3.75320381, 4.32400937, 2.43537978, 3.73691774,  2.5163266])

students_mat = np.column_stack([ids, scores])

accepted_std = students_mat[np.where(students_mat[1] >= 4.)]

print(accepted_std)
array([[2. , 4.32400937]])

scores\u col或scores
是一个
1D
数组,因此
scores\u col[:,1]
不起作用。@Divakar,已编辑。考虑到1D不起作用。我如何使用
已接受的
学生建立索引。或者,真的有可能吗?为什么要使用
accepted
对其进行索引?使用建议的方法,您可以立即从整个
numpy
数组中进行切片,而不是首先获取
accepted
的所有值,然后在
students\u mat
数组中搜索它们。您的第二个例程没有编译。您使用的是哪种Python版本?忽略最后一个
数组([…])
,因为它是
print()
语句的输出。
'3.6.0 | Anaconda 4.3.1(64位)|(默认值,2016年12月23日,11:57:41)[MSC v.1900 64位(AMD64)]