Numpy: Ein neuer gewaltiger BUG in Advanced Indexing?

Erstellt am 30. März 2017  ·  3Kommentare  ·  Quelle: numpy/numpy

Dies ist ein Fehler

train = np.zeros([26,26])
train2 = np.zeros([26,26])
tmp = [1,2,3,4,5,6,1,2,3,4,5,6]
train[tmp[0:-1], tmp[1:]] += 1
for i in range(len(tmp)-1):
    train2[tmp[i], tmp[i+1]] += 1
print(np.sum(train - train2))

die Ausgabe ist -5
Ich finde, dass train nicht gleich train2 wenn es einige doppelte Tupel in tmp . Stimmt etwas nicht mit numpy Slicing.

53 - Invalid

Hilfreichster Kommentar

Sie wissen, dass Sie zweimal versuchen, an die "gleiche Position" zu schreiben, zum Beispiel [1, 2] . Leider (oder zum Glück, je nach Sichtweise) funktioniert das nicht.

Aber Sie können np.add.at was laut den Dokumenten "Für die Addition von ufunc ist diese Methode äquivalent zu a[indices] += b, außer dass Ergebnisse für Elemente akkumuliert werden, die mehr als einmal indiziert sind.":

train = np.zeros([26,26])
np.add.at(train, [tmp[:-1], tmp[1:]], 1)

Alle 3 Kommentare

Ebenfalls.

Sie wissen, dass Sie zweimal versuchen, an die "gleiche Position" zu schreiben, zum Beispiel [1, 2] . Leider (oder zum Glück, je nach Sichtweise) funktioniert das nicht.

Aber Sie können np.add.at was laut den Dokumenten "Für die Addition von ufunc ist diese Methode äquivalent zu a[indices] += b, außer dass Ergebnisse für Elemente akkumuliert werden, die mehr als einmal indiziert sind.":

train = np.zeros([26,26])
np.add.at(train, [tmp[:-1], tmp[1:]], 1)

Vielen Dank!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

keithbriggs picture keithbriggs  ·  3Kommentare

kevinzhai80 picture kevinzhai80  ·  4Kommentare

thouis picture thouis  ·  4Kommentare

toddrjen picture toddrjen  ·  4Kommentare

dcsaba89 picture dcsaba89  ·  3Kommentare