Подход № 1
Вот один векторизованный подход с broadcasted assignment
-
# Cols where the data is to be copied
idx = sorted_indices.reshape(-1,N_sub)
# Copy data from the first N_sub columns but introducing an extra dimension,
# which allows broadcasted vectorized assignments
X[:,idx[1:]] = X[:,None,idx[0]]
Подход № 2
Мы также можем просто переставить столбцы, чтобы получить желаемый результат -
s2D = sorted_indices.reshape(-1,N_sub)
k = np.empty(s2D.size,dtype=int)
k[s2D] = np.arange(N_sub)
a = X[:,sorted_indices[:N_sub]]
Xnew = a[:,k]