从numpy向量中返回小于1的最大值

时间:2018-05-18 08:20:21

标签: python numpy

我在python中有一个numpy向量,我想找到向量的最大值的索引,条件是它小于1。我举例如下:

temp_res = [0.9, 0.8, 0.7, 0.99, 1.2, 1.5, 0.1, 0.5, 0.1, 0.01, 0.12, 0.56, 0.89, 0.23, 0.56, 0.78]
temp_res = np.asarray(temp_res)
indices = np.where((temp_res == temp_res.max()) & (temp_res < 1))

但是,我尝试的东西总是返回一个空矩阵,因为这两个条件都不能满足。 HU想要作为最终结果返回指数= 3,它对应于0.99最大值,它小于1.我该怎么办?

2 个答案:

答案 0 :(得分:3)

过滤数组后需要执行max()功能:

temp_res = np.asarray(temp_res)
temp_res[temp_res < 1].max()

Out[60]: 0.99

如果你想找到所有的索引,这里有一个更通用的方法:

mask = temp_res < 1
indices = np.where(mask)
maximum = temp_res[mask].max()
max_indices = np.where(temp_res == maximum)

示例:

...: temp_res = [0.9, 0.8, 0.7, 1, 0.99, 0.99, 1.2, 1.5, 0.1, 0.5, 0.1, 0.01, 0.12, 0.56, 0.89, 0.23, 0.56, 0.78]
...: temp_res = np.asarray(temp_res)
...: mask = temp_res < 1
...: indices = np.where(mask)
...: maximum = temp_res[mask].max()
...: max_indices = np.where(temp_res == maximum)
...: 

In [72]: max_indices
Out[72]: (array([4, 5]),)

答案 1 :(得分:2)

您可以使用:

np.where(temp_res == temp_res[temp_res < 1].max())[0]

示例:

In [49]: temp_res
Out[49]: 
array([0.9 , 0.8 , 0.7 , 0.99, 1.2 , 1.5 , 0.1 , 0.5 , 0.1 , 0.01, 0.12,
       0.56, 0.89, 0.23, 0.56, 0.78])

In [50]: np.where(temp_res == temp_res[temp_res < 1].max())[0]
    ...: 
Out[50]: array([3])