Ich bin ein großer Satz von Positionen zu unterschiedlichen Zeitpunkten, als eine spärliche Matrix Verwaltung: eine Anordnung von Positionen (die Spalten) und eine Reihe von Zeiten mit der gleichen Größe. Z.B.numpy/tensorflow Vektorisierung von Scheiben
matrix = numpy.random.randint(2, size = 100).astype(float).reshape(10,10)
times = numpy.nonzero(matrix)[0]+1
positions = numpy.nonzero(matrix)[1]
Jetzt muss ich die Positionen mit den Geschwindigkeiten zu einer Zeit zugeordnet korrigieren. Das Problem besteht darin, dass ich als spärliche Matrix die mit einer Zeit verbundene Geschwindigkeit auf jede Position zu einer bestimmten Zeit (d. H. Auf jedes Element ungleich Null in einer gegebenen Reihe) erweitern muss. Ich kenne die Indizes der ersten Position zur angegebenen Zeit und die Anzahl der Male nTimes
Wie kann ich diesen Code vektorisieren (d. H. Die Schleife entfernen)?
indexes = numpy.where(numpy.diff(times)>0)[0]+1
indexes = numpy.concatenate(([0],indexes, [times.size]))
nTimes = numpy.size(indexes)-1
speeds = numpy.random.rand(nTimes)
starts = indexes[:-1]
ends = indexes[1:]
expandedSpeeds = numpy.zeros(positions.size)
for i in numpy.arange(0,nTimes):
expandedSpeeds[starts[i]:ends[i]] = speeds[i]
Bearbeitet, um ein ausführbares Beispiel zu geben.
In Ihrem Beispiel finde ich mehrere Dinge verwirrend. Was sind Indizes? Wenn 'expandedSpeeds' eine erste Dimension der Größe 3 hat, ist diese Indizierung in der letzten Zeile etwas merkwürdig. Auf der rechten Seite der letzten Zeile haben Sie grundsätzlich 'Geschwindigkeiten [i]' (außer es in einem Array ist). Könnten Sie bitte einen runnable MCVE in Ihre Frage einfügen? –
Ja, Sie haben recht, es tut mir so leid, ich habe ein Durcheinander gemacht, indem ich den Code kopiert und versucht habe, das Problem zu vereinfachen. Das 'indexes'-Array ist' numpy.where (numpy.diff (mal)> 0) '. Ich werde ein lauffähiges Beispiel schreiben. – LolAsdOmgWtfAfk
@AndrasDeak jetzt können Sie den Code versuchen, sollte es richtig funktioniert, danke und Entschuldigung wieder. – LolAsdOmgWtfAfk