如何快速找到数组中某行元素的最小或最大和?
例如:
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)
在本机Python中,min并max具有以下关键功能:
>>> 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)
您可以使用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 = 0和array_maximum_index = 7,因为这些索引处的总和是-1404.55157和5566.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)
| 归档时间: |
|
| 查看次数: |
1730 次 |
| 最近记录: |