代码之家  ›  专栏  ›  技术社区  ›  Dmitry

Python中多维数组转置的多线程版本

  •  -2
  • Dmitry  · 技术社区  · 9 年前

    是否有多线程版本的 transpose 在Python中的多维数组?传统Numpy 只能在1个CPU线程上工作,因此工作速度太慢。

    我的代码运行太慢:

    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。

    1 回复  |  直到 9 年前
        1
  •  1
  •   hpaulj    9 年前

    我不会提高我的内存使用率。但是比较一下这些时间

    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)
    

    转置数组只需要创建数组所需时间的一小部分。它是在创建视图,而不是副本。现在,对该视图执行进一步的操作(如重塑)可能会强制复制。