gpt4 book ai didi

python - 有没有更快的方法来分离两个数组的最小值和最大值?

转载 作者:太空狗 更新时间:2023-10-30 02:47:16 27 4
gpt4 key购买 nike

In [3]: f1 = rand(100000)
In [5]: f2 = rand(100000)

# Obvious method:
In [12]: timeit fmin = np.amin((f1, f2), axis=0); fmax = np.amax((f1, f2), axis=0)
10 loops, best of 3: 59.2 ms per loop

In [13]: timeit fmin, fmax = np.sort((f1, f2), axis=0)
10 loops, best of 3: 30.8 ms per loop

In [14]: timeit fmin = np.where(f2 < f1, f2, f1); fmax = np.where(f2 < f1, f1, f2)
100 loops, best of 3: 5.73 ms per loop


In [36]: f1 = rand(1000,100,100)

In [37]: f2 = rand(1000,100,100)

In [39]: timeit fmin = np.amin((f1, f2), axis=0); fmax = np.amax((f1, f2), axis=0)
1 loops, best of 3: 6.13 s per loop

In [40]: timeit fmin, fmax = np.sort((f1, f2), axis=0)
1 loops, best of 3: 3.3 s per loop

In [41]: timeit fmin = np.where(f2 < f1, f2, f1); fmax = np.where(f2 < f1, f1, f2)
1 loops, best of 3: 617 ms per loop

比如,也许有一种方法可以一步执行两个 where 命令并返回 2 次?

如果 amin 快得多,为什么它的实现方式与 where 不同?

最佳答案

使用 numpy 内置的元素级 maximumminimum - 它们比 where 更快。numpy docs for maximum中的注释确认这一点:

Equivalent to np.where(x1 > x2, x1, x2), but faster and does proper broadcasting.

第一次测试你想要的行是这样的:

fmin = np.minimum(f1, f2); fmax = np.maximum(f1, f2)

我自己的结果表明这要快得多。请注意,minimummaximum 将适用于任何 n 维数组,只要两个参数的形状相同即可。

Using amax                    3.506
Using sort 1.830
Using where 0.635
Using numpy maximum, minimum 0.178

关于python - 有没有更快的方法来分离两个数组的最小值和最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16578068/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com