Ich habe zwei Arrays, A und B. Ich möchte ein neues Array C mit derselben Dimension wie B bilden, wobei jedes Element SUM (A) für A & gt; B
Unten ist mein Arbeitscode
%Vor%Wenn A jedoch Millionen von Zeilen hat und B tausende hat, und ich ähnliche Berechnungen für 20 Array-Paare durchführen muss, dauert es wahnsinnig viel Zeit.
Gibt es einen schnelleren Weg?
Zum Beispiel ist Histounts ziemlich schnell, aber es zählt, anstatt zu summieren.
Danke
Sie hatten die richtigen Ideen mit histcounts
, da Sie bestimmte A
Elemente basierend auf binning
im Grunde "akkumulieren". Diese Binning-Operation könnte mit histc
durchgeführt werden. In diesem Beitrag wird eine Lösung aufgeführt, die mit ähnlichen Schritten wie in @David's answer
beginnt und dann histc
verwendet bin und summiere selektive Elemente von A
, um uns die gewünschte Ausgabe und alles vektorisiert zu erhalten. Hier ist die Implementierung -
Denken Sie auch daran, wenn Sie das Ergebnis dieser Methode mit dem aus der ursprünglichen for-loop-Version vergleichen, dass es leichte Abweichungen in der Ausgabe geben würde, da diese vektorisierte Lösung cumsum
verwendet, was eine laufende Summierung berechnet große kumulativ summierte Zahlen werden zu einzelnen Elementen hinzugefügt, die vergleichsweise sehr klein sind, während die For-Loop-Version
würde nur selektive Elemente summieren. Also, floating-precision issues
würde da hoch kommen.
Abhängig von der Größe Ihrer Arrays (und Ihren Speicherbeschränkungen) ist der folgende Code möglicherweise etwas schneller:
%Vor%Obwohl es vektorisiert ist, scheint es (vielleicht) durch die Zuweisung von Speicher (Engpässe) zu sein. Ich suche nach einer weiteren Beschleunigung. Abhängig von der Größe Ihres Eingabevektors habe ich bei großen Vektoren bis zu Faktor 2 schneller gemacht.
Tags und Links arrays performance matlab