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

阵列上的广播掩码操作

  •  1
  • Gabriel  · 技术社区  · 5 年前

    我正试图提高一个相当简单的掩蔽操作在三个数组上的性能,给定其中一列中的元素到第四个数组的同一列的距离。所有数组都具有相同的形状。

    能否通过广播提高此操作的性能?

    # Random data with proper shape
    x1, x2, x3, x4 = np.random.uniform(1., 10., (4, 10, 1000))
    
    # This is the operation I' trying to 
    dist = 0.01
    for x in (x2, x3, x4):
        # Mask of the distance between the column '-6' of x1 versus arrays
        # x2, x3, x4
        msk = abs(x1[-6] - x[-6]) > dist
    
        # If the distance in this array is larger than the maximum allowed (dist),
        # mask with values from 'x1'.
        x[:, msk] = x1[:, msk]
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   hilberts_drinking_problem    5 年前

    作为广播的另一种选择,我用numba得到了大约10倍的加速。

    np.random.seed(0)
    xs = np.random.uniform(0, 10, (4, 10, 1000))
    x1, x2, x3, x4 = xs.copy()
    
    from numba import jit
    
    
    @jit(nopython=True)
    def modified(xs):
        dist = .01
        for i in range(1, 4):
            for j in range(1000):
                if abs(xs[i, -6, j] - xs[0, -6, j]) > dist:
                    for k in range(10):
                        xs[i, k, j] = xs[0, k, j]
    
    推荐文章