Mathematica große Tabelle periodische Interpolation

7

Ich habe eine sehr große Tabelle in Mathematica ((dimcub-1) ^ 3 Elementen), die von einer inversen FFT kommt. Ich muss für diese Tabelle eine periodische Interpolation verwenden. Da die periodische Interpolation erfordert, dass die ersten Elemente und die letzten Elemente gleich sind, erstelle ich eine neue Tabelle von Dim ^ 3 Elementen manuell und verwende diese in meiner Interpolation. Es funktioniert, aber es ist hässlich / langsam und aufgrund meiner überflüssigen Zwischentabelle traf ich früher die Speicherbarriere. Kann mir irgendjemand sagen, wie ich meine alte Tabelle irgendwie in eine periodische umwandeln kann, indem ich Elemente anfüge oder meine periodische Tabelle verwende, um eine periodische Interpolationsfunktion zu erstellen? Hier ist mein aktueller Code:

mr 1 ist die neue Tabelle:

%Vor%

myinterpolatingfunction benötigt viel weniger Speicher und funktioniert einwandfrei, sobald ich die älteren Tabellen entfernt habe. Jede Hilfe wird sehr geschätzt.

    
Hsn 31.05.2011, 22:45
quelle

4 Antworten

4

Danke für alle Antworten. Ich habe versucht, den Vorschlag von Leonid, aber wenn ich meine OldTable drucken, war es immer noch (Dimcub -1) ^ 3 dimensional. Neue Elemente wurden definiert und ich kann sie einzeln sehen, aber sie erscheinen nicht als Teil der alten Tabelle, wenn ich die gesamte Tabelle drucke. So endete ich mit etwas ähnlichem, das genau das tut, was ich brauchte:

%Vor%

Die Antwort von Wizard ist viel zu weit fortgeschritten für meine Mathematica.

    
Hsn 01.06.2011, 06:45
quelle
9

Sowohl die Antworten von Leonid als auch Mr.Wizard machen zu viel Arbeit. In Leonids Fall sind nur die ersten drei Zeilen notwendig. Um das zu zeigen, werde ich die letzten 4 Set s zu Equal s:

ändern %Vor%

Was Leonid macht, ist in den folgenden Abbildungen dargestellt. Die Zeilen 4-6 seines Codes machen etwas, wie es auf der linken Seite dargestellt ist: Kopieren einer Linie (dunklere Farbe) einer bereits kopierten Ebene (helle Farben). Zeile 7 ist auf der rechten Seite dargestellt. Dies ist eine Zelle-zu-Zelle-Kopie von diagonal gegenüberliegenden Positionen, und ihre Operation ist nicht in irgendeiner der ersten drei Kopieraktionen getrennt enthalten, sondern ist ein Ergebnis ihrer aufeinanderfolgenden Operation.

    
Sjoerd C. de Vries 01.06.2011 06:01
quelle
8

Sie können es viel schneller und speichereffizienter erhalten, indem Sie die ursprüngliche Tabelle wie folgt ändern:

%Vor%

Diese Zuweisungen ersetzen verschachtelte Schleifen und sind viel schneller, außerdem benötigen Sie keinen Speicher zum Speichern der Kopie. Dies basiert auf einer erweiterten vektorisierten Funktionalität des Teils -Befehls (Array- und allgemeine Ausdrucksindizierung), insbesondere vektorisiert Zuordnungen. Es ist auch wichtig, dass Ihr numerisches Array in einem Formular Packed Array enthalten ist, was oft der Fall ist. p>     

Leonid Shifrin 31.05.2011 23:07
quelle
5

Nur weil ich ein bisschen wie ein Loon bin, kann Leonids Lösung folgendermaßen geschrieben werden:

%Vor%     
Mr.Wizard 01.06.2011 00:38
quelle