Каков наилучший способ применить 2d маску к 1d массиву? скажем, у нас есть массив a формы (k, n), массив b формы (k, 1) и маска формы (k, n), которую я хочу вычислить
c = np.zeros_like(a)
for i in range(a.shape[1]):
c[mask[:, i], i] = a[mask[:, i], i] - b[mask[:, i]]
есть более эффективный способ, чем использовать np.repat
?
c[mask] = a[mask] - np.repeat(b, a.shape[1], axis=1)[mask]
, например:
a = np.arange(25).reshape(5, 5)
b = np.ones((5, 1))
mask = np.random.randint(0, 2, (5, 5), dtype=np.bool)
c = np.zeros_like(a)
c[mask] = a[mask] - np.repeat(b, a.shape[1], 1)[mask]