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

高效地替换应用于numpy阵列的vstack+串联

  •  2
  • Gabriel  · 技术社区  · 8 年前

    下面代码块中的最后两行在我的实际代码中重复了数百万次:

    import numpy as np
    
    # Data with proper shape
    N1, N2 = 3, 5
    aa = np.random.uniform(0., 1., (23, 2000))
    a1 = np.random.uniform(0., 1., N1)
    a2 = np.random.uniform(0., 1., N2)
    
    # Replace these two lines as efficiently as possible
    a3 = np.vstack(np.concatenate((a1, a2, a1, a2)))
    aa[:(N1 + N2 + N1 + N2)] = aa[:(N1 + N2 + N1 + N2)] + a3
    

    结合 np.vstack() 具有 np.concatenate() 然后将结果添加到数组的一部分似乎不是最佳的。

    是否有更好的,即: 更高效 ,方法是什么?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Mazdak    8 年前

    你可以使用 np.concatenate() 和一个简单的 广播 :

    In [18]: np.concatenate((a1, a2, a1, a2))[:,None]