In [1]: import numpy as npIn [2]: a = np.random.rand(3000, 16000)In [3]: %timeit a.min(axis=0)1 loops, best of 3: 421 ms per loopIn [4]: %timeit a.argmin(axis=0)1 loops, best of 3: 1.95 s per loopIn [5]: %timeit a.min(axis=1)1 loops, best of 3: 302 ms per loopIn [6]: %timeit a.argmin(axis=1)1 loops, best of 3: 303 ms per loopIn [7]: %timeit a.T.argmin(axis=1)1 loops, best of 3: 1.78 s per loopIn [8]: %timeit np.asfortranarray(a).argmin(axis=0)1 loops, best of 3: 1.97 s per loopIn [9]: b = np.asfortranarray(a)In [10]: %timeit b.argmin(axis=0)1 loops, best of 3: 329 ms per loop
也许
min足够聪明,可以按顺序在阵列上执行其工作(因此具有高速缓存局部性),并且
argmin正在阵列中跳跃(导致大量高速缓存未命中)?
无论如何,如果您
randvals从一开始就愿意保留为按Fortran顺序排列的数组,则它会更快,尽管将其复制到按Fortran顺序排列并没有帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)