首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在每个索引上找到3个或更多个数组的最大值

如何在每个索引上找到3个或更多个数组的最大值
EN

Stack Overflow用户
提问于 2019-09-05 10:41:43
回答 2查看 63关注 0票数 0

因此,我基本上是试图在图像处理应用程序的3个并行numpy数组上得到最大值(最小值,或类似的选项)。

问题是,对于给定的数组:

代码语言:javascript
复制
a = [1, 2, 34, 5]
b = [3, 5, 6, 1]
c = [4, 62, 12, 6]

我想获得类似的数组,如:

代码语言:javascript
复制
maxArray = [4, 62, 34, 6]

其中,每个元素是数组中公共索引的最大值。

有一个明显的方法,经典和天真的编程技术,但我介入了一种矢量化的方式,因为我只是不能把我的头围绕它。

我是不是想错了?你来告诉我。手前谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-05 19:23:51

它将取决于数组的数量和大小,但通常使用functools.reducenp.maximum将是最好的选择之一,因为它避免了相对昂贵的数组堆叠,因为它涉及所有子数组的完整副本,但在我们所给出的数组上确实使用了矢量化函数:

代码语言:javascript
复制
from functools import reduce                                 
import numpy as np

# make example
N = 1000,
a,b,c,d,e = (np.random.random(N) for _ in "abcde")

# my proposal
def f_pp():
    return reduce(np.maximum,(a,b,c,d,e))                            

# @yatu's
def f_yatu():                     
    return np.max((a,b,c,d,e),0)

# @rusu_ro1 1st
def f_rr_1():
    return [max(x) for x in zip(a, b, c, d, e)]

# 2nd
def f_rr_2():
    return list(map(max, zip(a, b, c, d, e)))

# rusu_ro1 modified by pp 1st
def f_rr_pp_1():
    return [*map(max,a,b,c,d,e)]

# 2nd
def f_rr_pp_2():
    return np.fromiter(map(max,a,b,c,d,e),float,1000)

# timings and check
all_funcs = {k:v for (k,v) in globals().items() if k.startswith('f_')}
for k,v in all_funcs.items():
print(k,timeit(v,number=1000),'correct',np.all(f_pp()==v()))

样本运行:

代码语言:javascript
复制
# f_pp 0.012913539074361324 correct True
# f_yatu 0.025256304070353508 correct True
# f_rr_1 0.8206795542500913 correct True
# f_rr_2 0.7683364972472191 correct True
# f_rr_pp_1 0.7669085101224482 correct True
# f_rr_pp_2 0.7993066972121596 correct True
票数 1
EN

Stack Overflow用户

发布于 2019-09-05 10:49:04

您可以使用:

1)对数组中具有公共索引的元素应用max buil函数,在列表理解中使用zip:

代码语言:javascript
复制
[max(e) for e in zip(a, b, c)]

2)类似于:

代码语言:javascript
复制
list(map(max, zip(a, b, c)))

产出:

代码语言:javascript
复制
[4, 62, 34, 6]

( 3)或@yatu建议:

代码语言:javascript
复制
np.max([a,b,c], axis=0)

产出:

代码语言:javascript
复制
array([ 4, 62, 34,  6])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57803677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档