如何快速找到数组中行的元素的最小值或最大值?
例如:
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. ]]]
答案 0 :(得分:3)
在原生Python中,min
和max
具有关键功能:
>>> 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.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])
对于您的数组,这会产生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])
答案 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)
您可以使用min
和max
并使用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