是否有多线程版本的 transpose 在Python中的多维数组?传统Numpy 只能在1个CPU线程上工作,因此工作速度太慢。
transpose
我的代码运行太慢:
import numpy as np # data is array of uint16 data = np.transpose(data, axes=(1, 2, 3, 0))
data 形状 (16, 938, 299, 299) 它已经工作了半个小时了,还没有完成!此外,它还消耗了20 GB的RAM。
data
(16, 938, 299, 299)
我不会提高我的内存使用率。但是比较一下这些时间
In [420]: timeit data = np.ones((16,100,10,20)) 1.35 ms ± 41.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) In [422]: timeit np.transpose(data,(1,2,3,0)) 1.79 µs ± 10.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
转置数组只需要创建数组所需时间的一小部分。它是在创建视图,而不是副本。现在,对该视图执行进一步的操作(如重塑)可能会强制复制。