J'ai un tableau 2d ndarray appelé weights
de forme (npts, nweights). Pour chaque colonne de weights
je souhaite mélanger les rangées de manière aléatoire. Je veux répéter ce processus num_shuffles
et stocke la collection de mélanges dans un tableau de 3d ndarray appelé weights_matrix
. Il est important de noter que pour chaque itération de brassage, les indices de brassage de chaque colonne de weights
devraient être les mêmes.
Ci-dessous figure une implémentation naïve explicite de cet algorithme en double pour boucle. Est-il possible d'éviter les boucles de python et de générer weights_matrix
en Numpy pur ?
import numpy as np
npts, nweights = 5, 2
weights = np.random.rand(npts*nweights).reshape((npts, nweights))
num_shuffles = 3
weights_matrix = np.zeros((num_shuffles, npts, nweights))
for i in range(num_shuffles):
indx = np.random.choice(np.arange(npts), npts, replace=False)
for j in range(nweights):
weights_matrix[i, :, j] = weights[indx, j]