Ich setze die Werte mehrerer Elemente in einem 2D-Array, jedoch enthalten meine Daten manchmal mehrere Werte für einen bestimmten Index.Umgang mit doppelten Indizes in NumPy-Zuweisungen
Es scheint, dass der "spätere" Wert immer zugewiesen wird (siehe Beispiele unten), aber ist dieses Verhalten garantiert oder gibt es eine Chance, dass ich inkonsistente Ergebnisse bekomme? Woher weiß ich, dass ich "später" so interpretieren kann, wie ich es in einem vektorisierten Auftrag möchte?
d. H. In meinem ersten Beispiel wird a
definitiv immer 4
enthalten und im zweiten Beispiel würde es jemals drucken values[0]
?
Sehr einfaches Beispiel:
import numpy as np
indices = np.zeros(5,dtype=np.int)
a[indices] = np.arange(5)
a # array([4])
Ein weiteres Beispiel
import numpy as np
grid = np.zeros((1000, 800))
# generate indices and values
xs = np.random.randint(0, grid.shape[0], 100)
ys = np.random.randint(0, grid.shape[1], 100)
values = np.random.rand(100)
# make sure we have a duplicate index
print values[0], values[5]
xs[0] = xs[5]
ys[0] = ys[5]
grid[xs, ys] = values
print "output value is", grid[xs[0], ys[0]]
# always prints value of values[5]
Um zu verstehen, was in den Arbeiten von Numpy Arrays passiert, empfehle ich http://scipy-lectures.github.io/advanced/advanced_numpy/ – tom10
Schöne Frage ... Dies ist einer von denen Sie wahrscheinlich warten müssen @seberg um eine sinnvolle Antwort zu bekommen. – Jaime
Ich bezweifle, dass alles garantiert ist, aber einige Experimente mit exotischen Arrays zeigen auf eine einfache Links-Rechts-Schleife über dem Array von Indizes. –