查找数组中行的最小值或最大值

时间:2018-03-12 00:34:40

标签: python numpy

如何快速找到数组中行的元素的最小值或最大值?

例如:

1, 2
3, 4
5, 6
7, 8

最小总和为第0行(1 + 2),最大总和为第3行(7 + 8)

  print mat.shape
  (8, 1, 2)  
  print mat
 [[[-995.40045 -409.15112]]

 [[-989.1511  3365.3267 ]]

 [[-989.1511  3365.3267 ]]

 [[1674.5447  3035.3523 ]]

 [[   0.         0.     ]]

 [[   0.      3199.     ]]

 [[   0.      3199.     ]]

 [[2367.      3199.     ]]]

4 个答案:

答案 0 :(得分:3)

在原生Python中,minmax具有关键功能:

>>> LoT=[(1, 2), (3, 4), (5, 6), (7, 8)]
>>> min(LoT, key=sum)
(1, 2)
>>> max(LoT, key=sum)
(7, 8)

如果你想要Python中第一个最小值或最大值的索引,你可以这样做:

>>> min(((i, t) for i, t in enumerate(LoT)), key=lambda (i,x): sum(x))
(0, (1, 2))

然后剥去那个元组以获得你想要的东西。您也可以在numpy中使用它,但在未知(对我而言)性能成本。

在numpy中,你可以这样做:

>>> a=np.array(LoT)
>>> a[a.sum(axis=1).argmin()]
array([1, 2])
>>> a[a.sum(axis=1).argmax()]
array([7, 8])

仅获取索引:

>>> a.sum(axis=1).argmax()
3

答案 1 :(得分:1)

您可以使用np.argminnp.sum

执行此操作
array_minimum_index = np.argmin([np.sum(x, axis=1) for x in mat])
array_maximum_index = np.argmax([np.sum(x, axis=1) for x in mat])

对于您的数组,这会产生array_minimum_index = 0array_maximum_index = 7,因为这些索引的总和为-1404.551575566.0

要简单地打印出最小和最大总和的值,您可以这样做:

array_sum_min = min([np.sum(x,axis=1) for x in mat])
array_sum_max = max([np.sum(x,axis=1) for x in mat])

答案 2 :(得分:1)

x = np.sum(x,axis=1)
min_x = x.min()
max_x = x.max()

假设x是4,2数组,使用np.sum对行进行求和,然后.min()返回数组的最小值,.max()返回最大值

答案 3 :(得分:0)

您可以使用minmax并使用sum作为密钥。

lst = [(1, 2), (3, 4), (5, 6), (7, 8)]

min(lst, key=sum) # (1, 2)
max(lst, key=sum) # (7, 8)

如果你想直接得到总和而你并不关心元组本身,那么map会有所帮助。

min(map(sum, lst)) # 3
max(map(sum, lst)) # 15