2015-01-28 14 views
8

anzuwenden I (arithmetics) zwei große System.Array s elementweise in Ironpython und das Ergebnis in der ersten Array wie folgt hinzufügen möchten:schnellste Weg arithmetische Operationen System.Array in Ironpython

for i in range(0:ArrA.Count) : 
     arrA.SetValue(i, arrA.GetValue(i) + arrB.GetValue(i)); 

Dies scheint jedoch sehr langsam zu sein. Mit einem C-Hintergrund möchte ich Zeiger oder Iteratoren verwenden. Ich weiß jedoch nicht, wie ich das IronPython-Idiom schnell anwenden soll. Ich kann keine Python-Listen verwenden, da meine Objekte ausschließlich vom Typ System.Array sind. Der Typ ist 3d float.

Was ist der schnellste/schnellste Weg, um diese Berechnung zu berechnen?

Edit:

  • Die Anzahl der Elemente ist ca. 256^3.
  • 3d float bedeutet, dass auf das Array wie folgt zugegriffen werden kann: array.GetValue (indexX, indexY, indexZ). Ich bin mir nicht sicher, wie der jeweilige Speicher in IronPythons System.Array organisiert ist.
  • Hintergrund: Ich habe eine Schnittstelle zu einer IronPython-API geschrieben, die den Zugriff auf Daten in einer Simulationssoftware ermöglicht. Ich erhalte 3D-Skalardaten und akkumuliere sie in einem temporären Array in meinem IronPython-Skript. Die Akkumulation wird 10.000 mal durchgeführt und sollte schnell sein, damit die Simulation nicht ewig dauert.
+0

Können Sie mehr Kontext zu machen? 3d schwimmen? Eine Struktur? Was ist die eigentliche Operation? 3 fügt hinzu? Wie viele Elemente sind groß? Wie oft tritt der Vorgang auf? –

+0

Zusätzlicher Kontext bereitgestellt. –

Antwort

0

Ist es möglich, die für IronPython entwickelte numpy-Bibliothek zu verwenden?

https://pytools.codeplex.com/wikipage?title=NumPy%20and%20SciPy%20for%20.Net

Es scheint, unterstützt zu werden, und soweit ich weiß, ist, wie nah Sie in Python C-Stil-Zeiger-Funktionalität mit Arrays und so bekommen können.

ein Array erstellen:

x = np.array([[1, 2, 3], [4, 5, 6]], np.int32) 

Multiply alle Elemente von 3,0:

x *= 3.0 
+0

Leider, wie ich eine API Schnittstelle bin, kann ich nicht von System.Array gehen. Wenn man zuerst in numpy konvertiert, wäre es nicht schneller, wirklich? –

+0

Können Sie die generischen Zugriffsmethoden IE 'für i im Bereich (0: ArrA.Count) ausprobieren: arrA [i] = arrA [i] + arrB [i]'? Vergleiche auch mit voll bei der Konvertierung in numpy, dann zurück zum Array. Wer weiß? :) – beiller

+0

Die generischen Zugriffsmethoden funktionieren nicht auf 3D-Arrays. Soweit ich weiß, muss ich, um in numpy zu konvertieren, dasselbe tun (zeitaufwendige Schleife) wie in meiner Frage gezeigt. –

Verwandte Themen