2017-04-19 7 views
5

Ich habe zwei verwandte numpy Arrays, X und y. Ich muss wählen n zufällige Zeilen von X und speichern Sie diese in einem Array, die entsprechenden y Wert und hängt daran den Index der Punkte nach dem Zufallsprinzip ausgewählt.Wählen Sie "einige" zufällige Punkte aus numpy Array

Ich habe ein anderes Array index, die eine Liste von Index speichert, die ich nicht abtasten möchte.

Wie kann ich das tun?

Beispieldaten:

index = [2,3] 
X = np.array([[0.3,0.7],[0.5,0.5] ,[0.2,0.8], [0.1,0.9]]) 
y = np.array([[0], [1], [0], [1]]) 

Wenn diese X ‚s wurden zufällig ausgewählt (wobei n=2):

index = [0,1,2,3] 
randomlySelectedY = [0,1] 

Wie kann ich:

randomylSelected = np.array([[0.3,0.7],[0.5,0.5]]) 

die gewünschte Ausgabe sein würde mach das?

Antwort

0

Ich würde ein Array von booleschen Werten verwalten, die ich fortlaufend verwende, um ein Indexarray zu zerschneiden und nach dem Zufallsprinzip aus dem Ergebnis zu wählen.

n = X.shape[0] 
sampled = np.empty(n, dtype=np.bool) 
sampled.fill(False) 
rng = np.arange(n) 

k = 2 

while not sampled.all(): 
    sample = np.random.choice(rng[~sampled], size=k, replace=False) 
    print(X[sample]) 
    print() 
    print(y[sample]) 
    print() 
    sampled[sample] = True 

[[ 0.2 0.8] 
[ 0.5 0.5]] 

[[0] 
[1]] 

[[ 0.3 0.7] 
[ 0.1 0.9]] 

[[0] 
[1]] 
+0

@scutnex abhängig, was Sie von Rekord bedeuten. Ich aktualisiere das "gesampelte" Array mit 'True' Werten ... das es aufzeichnet. Dies ist ein Algorithmus dafür. Es gibt viele Dinge, die je nach Geschmack angepasst werden können. – piRSquared

0

Wenn Sie n Zeilen zufällig mit einer gleichen Wahrscheinlichkeit der Wahl eine Zeile auswählen möchten: auf

n = 2 #for sake of argument 
randomlySelectedY = np.argsort(np.random.random(4))[:n] #generate a 1x4 array of random, uniformly distributed numbers and then select the indices of the lowest n numbers 

randomylSelected = X[randomlySelectedY] 
index = np.linspace(1,np.size(X[:,1]),np.size(X[:,1])) 
Verwandte Themen