查找数组中一行的最小或最大和

Ada*_*Lee 3 python numpy

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

例如:

1, 2
3, 4
5, 6
7, 8
Run Code Online (Sandbox Code Playgroud)

最小和为第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.     ]]]
Run Code Online (Sandbox Code Playgroud)

daw*_*awg 5

在本机Python中,minmax具有以下关键功能:

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

如果要在Python中的第一个min或max 索引,则可以执行以下操作:

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

然后将该元组剥离以得到所需的内容。您也可以在numpy中使用它,但是(对我而言)性能成本未知。


在numpy中,您可以执行以下操作:

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

仅获取索引:

>>> a.sum(axis=1).argmax()
3
Run Code Online (Sandbox Code Playgroud)


sac*_*cuL 1

您可以使用np.argmin和 来执行此操作np.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])
Run Code Online (Sandbox Code Playgroud)

对于您的数组,这会导致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])
Run Code Online (Sandbox Code Playgroud)