python输入两个数求最大值和最小值_python – 是否有更快的方法来分隔两个数组的最小值和最大值?...

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

就像,也许有一种方法可以同时执行两个命令,一步返回2?

为什么amin的实现方式不同于哪里,如果它快得多?

解决方法:

使用numpy的内置元素最大值和最小值 – 它们比其他地方更快.

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)

我自己的结果显示这要快得多.请注意,只要两个参数的形状相同,最小值和最大值将适用于任何n维数组.

Using amax 3.506

Using sort 1.830

Using where 0.635

Using numpy maximum, minimum 0.178

标签:python,numpy,where,minimum