Кукольный способ копирования подмножества в остальную часть массива? - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь скопировать первые строки матрицы в другие строки. Есть ли более «тупой» способ сделать это?

import numpy as np

N     =   4 # NxN matrix
N_sub =   2 # Subset to be copied over to the other N-N_sub rows
X     = np.random.random([N,N]) # random matrix
sorted_indices = np.argsort(X.sum(axis = 1)) # sort according to row sum
for i in range(N_sub,N,N_sub):
    X[:,sorted_indices[i:(i+N_sub)]] = X[:,sorted_indices[0:N_sub]] # copy over

1 Ответ

1 голос
/ 12 марта 2019

Подход № 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...