我有多个相同大小的列表(或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]]
这很好用,但效率不高 - 特别是对于我拥有的数组大小和我需要比较的数组数量。我怎样才能更有效地做到这一点?
答案 0 :(得分:7)
numpy.maximum(x1, x2[, out])
元素最大数组 元件。比较两个数组并返回一个包含元素的新数组 最大值。如果被比较的元素之一是nan,那么 元素被返回。如果两个元素都是nans,则第一个元素是 回。后者的区别对于复杂的nans很重要 被定义为实部或虚部中的至少一个是a 楠。净效应是nans传播。
答案 1 :(得分:5)
非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 :(得分:1)
如果您需要比较更多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
括号内的2执行沿第3轴的最大操作,第3轴是dstack
为我们创建的新轴
这将扩展到任意数量的相同大小的2D阵列
答案 3 :(得分:0)
类似的东西:
numpy_arrays = [A, B, C]
result = [max(elem) for elem in zip(*numpy_arrays)]