为了账号安全,请及时绑定邮箱和手机立即绑定

有没有更快的方法来分离两个阵列的最小值和最大值?

有没有更快的方法来分离两个阵列的最小值和最大值?

白衣染霜花 2021-03-11 13:13:48
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 loopIn [13]: timeit fmin, fmax = np.sort((f1, f2), axis=0)10 loops, best of 3: 30.8 ms per loopIn [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 loopIn [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 loopIn [40]: timeit fmin, fmax = np.sort((f1, f2), axis=0)1 loops, best of 3: 3.3 s per loopIn [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呢?
查看完整描述

1 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

使用numpy的内置的逐元素maximum和minimum-他们比快where。numpy文档中的注释最大程度地证实了这一点:


等效于np.where(x1> x2,x1,x2),但速度更快,并且可以正常广播。


您想要的第一个测试行将是这样的:


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

我自己的结果表明,这样做的速度要快得多。请注意,minimum和maximum将任意n维数组上工作,只要这两个参数是相同的形状。


Using amax                    3.506

Using sort                    1.830

Using where                   0.635

Using numpy maximum, minimum  0.178


查看完整回答
反对 回复 2021-03-24
  • 1 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信