TypeError: nur integer-Skalare arrays kann konvertiert werden zu einem skalaren index mit 1D-numpy array-Indizes
Ich möchte eine Funktion schreiben, die nach dem Zufallsprinzip wählt Elemente aus einer trainingsmenge, sondern auf der Grundlage der bin Wahrscheinlichkeiten zur Verfügung gestellt. Ich teilen Sie die set-Indizes zu 11 bins, dann erstellen benutzerdefinierte Wahrscheinlichkeiten für Sie.
bin_probs = [0.5, 0.3, 0.15, 0.04, 0.0025, 0.0025, 0.001, 0.001, 0.001, 0.001, 0.001]
X_train = list(range(2000000))
train_probs = bin_probs * int(len(X_train) / len(bin_probs)) # extend probabilities across bin elements
train_probs.extend([0.001]*(len(X_train) - len(train_probs))) # a small fix to match number of elements
train_probs = train_probs/np.sum(train_probs) # normalize
indices = np.random.choice(range(len(X_train)), replace=False, size=50000, p=train_probs)
out_images = X_train[indices.astype(int)] # this is where I get the error
Bekomme ich die folgende Fehlermeldung:
TypeError: only integer scalar arrays can be converted to a scalar index with 1D numpy indices array
Ich finde das seltsam, da ich bereits überprüft, die das array von Indizes, die ich-Kiste, es ist 1-D, es ist integer, und es ist scalar.
Was bin ich?
Hinweis : ich habe versucht, pass indices
mit astype(int)
. Gleichen Fehler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht die Fehlermeldung ist etwas irreführend, aber das wesentliche ist, dass
X_train
ist eine Liste, nicht ein numpy-array. Sie können nicht verwenden Sie die array-Indizierung auf. Machen Sie zuerst einen array:Einen einfachen Fall, wird diese Fehlermeldung generiert:
Einige Varianten, die funktionieren:
Basic-python-Liste eine Indizierung strenger als numpy ist:
Bearbeiten
Blick wieder auf
indices
ist ein 1d-array mit ganzen zahlen, aber es ist sicherlich nicht die Skalare. Es ist ein array von 50000 zahlen. Liste ist nicht indiziert werden kann, mit mehreren Indizes gleichzeitig, unabhängig davon, ob Sie in eine Liste oder ein array ist.