使用NumPy如何通过对应的索引在一个列表的列表中找到最大值

3

我需要找到一个列表中所有索引项的最大值,有什么高效的方法吗?numpy有没有相关函数或是Pythonic风格的最佳方式?我的列表元素长度都超过100,并且每个列表都包含20个元素。

例如:

[[1,2,3,4,5,6],[3,2,1,4,5,6],[4,3,2,1,5,6],[1,1,1,1,1,1]]
max_list = [4,3,3,4,5,6]

我的列表将会包含大约100个元素,每个内部列表都有20个元素


2
不确定您的限制是什么,但为什么不将列表列表转换为numpy数组,然后在您喜欢的任何轴上取最大值呢?(请参阅https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.amax.html) - fgb
Alex Hall的回答非常好。太遗憾了,这是一个重复的(顺便说一句,找到了不错的重复内容)。 - Jean-François Fabre
3个回答

9
没有使用numpy的解决方案:
data = [[1,2,3,4,5,6],[3,2,1,4,5,6],[4,3,2,1,5,6],[1,1,1,1,1,1]]
list(map(max, *data))

list在Python 2中不是必需的(甚至在Python 3中也取决于您对结果要做什么)。


2
你可以解释一下不太为人知的事实,即 map 可以同时迭代多个列表。 - Jean-François Fabre
有一个小问题。当“data”仅包含一个子列表或为空时,它将无法工作。 - VPfB

3

同时没有使用numpy(但是有评论作者的帮助)

inp = [[1,2,3,4,5,6],[3,2,1,4,5,6],[4,3,2,1,5,6],[1,1,1,1,1,1]]
out = [max(s) for s in zip(*inp)]

2
您可以使用以下内容:
a = np.array([[1,2,3,4,5,6],[3,2,1,4,5,6],[4,3,2,1,5,6],[1,1,1,1,1,1]])
a.max(0) #a.max(axis=0)

这导致:
array([4, 3, 3, 4, 5, 6])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接