J'ai un tableau numpy qui ressemble àLe choix d'un échantillon aléatoire de chaque rangée de tableau numpy, à l'exception des nombres négatifs
>>> a
array([[ 3. , 2. , -1. ],
[-1. , 0.1, 3. ],
[-1. , 2. , 3.5]])
Je voudrais sélectionner une valeur de chaque ligne au hasard, mais je voudrais exclure les -1 valeurs de l'échantillonnage aléatoire.
Ce que je fais est actuellement:
x=[]
for i in range(a.shape[0]):
idx=numpy.where(a[i,:]>0)[0]
idxr=random.sample(idx,1)[0]
xi=a[i,idxr]
x.append(xi)
et obtenir
>>> x
[3.0, 3.0, 2.0]
Cela devient un peu lent pour les grands tableaux et je voudrais savoir s'il existe un moyen de sélectionner conditionnellement au hasard valeurs de la matrice originale a
sans traiter individuellement chaque ligne.
Je n'ai aucune expérience avec NumPy, mais je l'aurais deviné générer un nombre aléatoire prendrait plus de temps que d'accéder à la valeur du tableau. Il en va de même pour l'ajout à une liste. Avez-vous profilé votre programme pour vous assurer que vous optimisez la bonne chose? – torak
J'ai profilé le programme et les lignes 'idx' et' idxr' sont les plus lentes, avec un temps presque égal pour chacune. – fideli
Vous attendez-vous toujours à avoir le même nombre de valeurs exclues dans chaque ligne? Si oui, vous pouvez vectoriser le tout et le faire dans deux lignes de code sans boucles python ... –