簡體   English   中英

如何從多個列表中查找最大值?

[英]How to find max values from multiple lists?

我有多個相同大小的列表(或numpy數組),我想返回一個相同大小的數組,每個點都有最大值。

例如,

A = [[0,1,0,0,3,0],[1,0,0,2,0,3]]
B = [[1,0,0,0,0,4],[0,5,6,0,1,1]]
C = numpy.zeros_like(A)
for i in xrange(len(A)):
    for j in xrange(len(A[0])):
        C[i][j] = max(A[i][j],B[i][j])

結果是C = [[1,1,0,0,3,4],[1,5,6,2,1,3]]

這工作正常,但效率不高 - 特別是對於我擁有的數組的大小和我需要比較的數組的數量。 我怎樣才能更有效地做到這一點?

使用numpy.maximum

numpy.maximum(x1, x2[, out])
元素最大的數組元素。

比較兩個數組並返回一個包含元素最大值的新數組。 如果被比較的元素之一是nan,則返回該元素。 如果兩個元素都是nans,則返回第一個元素。 后者的區別對於復雜的nans是重要的,復雜的nans被定義為實部或虛部中的至少一個是nan。 凈效應是nans傳播。

非Numpy解決方案

>>> [map(max,a,b,c) for a,b,c in zip(A,B,C)]
[[1, 1, 0, 0, 3, 4], [1, 5, 6, 2, 1, 3]]
>>> 

如果您需要比較更多2個陣列,您可以執行以下操作

from numpy import random, dstack

A = random.random((2,5))
B = random.random((2,5))
C = random.random((2,5))

stacked_arrays = dstack((A,B,C))
max_of_stack = stacked_arrays.max(2)

dstack將您的2D陣列轉換為2D陣列的3D堆棧

max括號內的max執行沿第3軸的最大操作,這是dstack為我們創建的新軸

這將擴展到任意數量的相同大小的2D陣列

就像是:

numpy_arrays = [A, B, C]

result = [max(elem) for elem in zip(*numpy_arrays)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM