Organisieren von Notebooks und Speichern von Ergebnissen in Mathematica

8

Ab sofort verwende ich 3 Notebook:

  • Funktionen

Wo ich alle Funktionen habe, die ich erstellt habe und die anderen Notebooks aufrufen.

  • Transformation

Basierend auf den Originaldaten berechne ich Transformationen und füge Spalten / Liste

hinzu

Wenn Daten meine Rohdaten sind, rufe ich dann an:

t1data: das Ergebnis der ersten Transformation

t2data: das Ergebnis der zweiten Transformation

und so weiter, Ich bin schon um 20 Uhr.

  • Anzeige & amp; Analyse

Unter Verwendung der beiden obigen Objekte erstelle ich ein Manipulate-Objekt, mit dem ich die Daten analysieren kann.

Fragen

  • Gibt es die Möglichkeit, die Ergebnisse des Transformationsnotizbuchs zu speichern, so dass zum Beispiel t13data im Display & amp; Analysis Notebooks, ohne alle vorherigen Berechnungen (t1, t2, t3 ... t12) auszuführen, auf denen es basiert?

  • Gibt es eine Möglichkeit, meine Funktionen oder transformierten Daten zu verwenden, ohne das entsprechende Notebook zu öffnen?

  • Macht meine Trennungsstrategie überhaupt Sinn?

Ab jetzt öffne ich systematisch die 3 und muss sie alle ausführen, bevor ich irgendetwas tun kann, und es dauert eine Weile, da meine Rechenleistung schlecht ist und trotzdem ineffiziente Codes.

    
500 13.06.2011, 17:32
quelle

2 Antworten

6

Zwischenergebnisse speichern

Das native Dateiformat für Mathematica-Ausdrücke ist die .m-Datei. Dies ist ein lesbares Textformat, und Sie können die Datei in einem Texteditor anzeigen, wenn Sie jemals Zweifel haben, was gespeichert wird oder nicht. Sie können diese Dateien mit Get laden. Die Kurzform für Get ist:

%Vor%

Die Verwendung von Get ersetzt oder aktualisiert vorhandene Zuweisungen, die explizit in der .m-Datei vorgenommen wurden.

Zwischenergebnisse, die einfache Zuweisungen sind ( dat = ... ), können mit Put gespeichert werden . Die Kurzform für Put ist:

%Vor%

Dies speichert nur den zugewiesenen Ausdruck selbst; Um die Definition wiederherzustellen, die Sie verwenden müssen:

%Vor%

Siehe auch PutAppend zum Anhängen von Daten an eine .m-Datei, wenn neue Ergebnisse erstellt werden.

Das Speichern von Ergebnissen und Funktionsdefinitionen, die komplexe Zuweisungen sind, erfolgt mit Save . Beispiele für solche Zuweisungen sind:

  • << "filename.m"
    
  • dat >> "dat.m"
    
  • dat = << "dat.m"
    

Für das letzte Beispiel ist die Komplexität, dass nPr von nCr abhängt. Mit Save ist es ausreichend, nur nPr zu speichern, um eine voll funktionsfähige Definition von nPr zu erhalten: die Definition von nCr wird automatisch gespeichert. Die Syntax lautet:

%Vor%

Mit Save werden die Zuweisungen selbst gespeichert; Um die Definitionen wiederherzustellen, verwenden Sie:

%Vor%

Verschieben von Funktionen in ein Paket

Neben Put und Save oder der manuellen Erstellung in einem Texteditor können .m-Dateien automatisch generiert werden. Dazu erstellen Sie ein Notizbuch und setzen Cell > Cell Properties > Initialization Cell auf den Zellen, die Ihre Funktionsdefinitionen enthalten. Wenn Sie das Notebook zum ersten Mal speichern, fragt Mathematica , ob Sie ein automatisches Speicherpaket erstellen möchten. Tun Sie dies, und Mathematica generiert eine .m-Datei parallel zur .nb-Datei, die den Inhalt aller Initialisierungszellen im Notebook enthält. Außerdem wird diese .m-Datei bei jedem Speichern des Notebooks aktualisiert, sodass Sie sie nie manuell aktualisieren müssen.

Alle Initialisierungszellen werden in der parallelen .m-Datei gespeichert. Ich empfehle, das Notebook nur für die Erstellung dieses Pakets zu verwenden und nicht auch für den Rest Ihrer Berechnungen.

Beim Verwalten von Funktionen muss der Kontext berücksichtigt werden. Nicht alle Funktionen sollten zu jeder Zeit global sein. Eine Reihe verwandter Funktionen sollte oft in einem eigenen Kontext gehalten werden, der dann leicht von % co_de ausgespielt oder entfernt werden kann % Darüber hinaus beruht eine Reihe von Funktionen häufig auf Unterfunktionen, die nicht außerhalb der Primärfunktionen aufgerufen werden müssen, daher sollten diese Unterfunktionen nicht global sein. All dies bezieht sich auf die Erstellung von Paketen. Übrigens bezieht es sich auch auf die Formatierung von Code, da die Kenntnis, dass nicht alle Unterfunktionen als global verfügbar gemacht werden müssen, die Freiheit gibt, viele Unterfunktionen auf die "oberste Ebene" des Codes zu verschieben, dh außerhalb von $ContextPath oder anderen Scoping-Konstrukte, ohne mit globalen Symbolen zu kollidieren.

Die Erstellung von Paketen ist ein komplexes Thema. Sie sollten sich mit Module , Begin , BeginPackage und End , um es besser zu verstehen, aber hier ist ein einfacher Rahmen, der Ihnen den Einstieg erleichtert. Sie können es als Vorlage für die Zeit folgen.

Dies ist eine alte Definition, die ich verwendet habe, bevor EndPackage existierte:

%Vor%

Alles oben geht in Initialisierungszellen. Sie können Textzellen, Abschnitte oder sogar andere Eingabezellen einfügen, ohne das generierte Paket zu beschädigen: nur der Inhalt der Initialisierungszellen wird exportiert.

DeleteDuplicates definiert den Kontext, zu dem Ihre Funktionen gehören, und deaktiviert alle nicht BeginPackage -Definitionen, um Kollisionen zu verhindern. (Es gibt Möglichkeiten, andere Funktionen aus Ihrem Paket aufzurufen, aber das ist besser für eine andere Frage).

Standardmäßig wird für jede Funktion eine System' -Nachricht definiert, auf die außerhalb des Pakets zugegriffen werden kann. Das ist nicht überflüssig! Während es andere Methoden gibt, ohne diese, werden Sie Ihre Funktion im sichtbaren Kontext nicht verfügbar machen.

Als nächstes haben Sie ::usage einen Kontext, der nur für das Paket ist, konventionell Begin .Nach diesem Punkt werden alle von Ihnen definierten Symbole (die nicht außerhalb dieses "'Private'" / Begin -Blocks verwendet werden) nicht global nach dem Laden des Pakets verfügbar gemacht und kollidieren daher nicht mit End -Symbolen.

Nach Ihren Funktionsdefinitionen schließen Sie den Block mit Global' . Sie können so viele End[] / Begin -Blöcke verwenden, wie Sie möchten, und ich verwende normalerweise für jede Funktion eine separate, obwohl dies nicht erforderlich ist.

Schließen Sie schließlich mit End , um die Umgebung wiederherzustellen, die sie vor der Verwendung von EndPackage[] hatte.

Nachdem Sie das Notebook gespeichert und das .m-Paket erstellt haben (sagen wir "meinpaket.m"), können Sie es mit BeginPackage :

laden %Vor%

Nun wird es eine Funktion Get im Kontext UnsortedUnion geben und es wird global erreichbar sein.

Sie sollten sich auch die Funktionalität von UU' ansehen, aber das ist ein wenig fortgeschrittener Meiner Meinung nach werde ich hier aufhören.

    
Mr.Wizard 14.06.2011, 02:03
quelle
8
  • Speichern von Variablenstatus: kann mit DumpSave , Save oder Put erfolgen. Lesen Sie mit Get oder & lt; & lt;
  • zurück
  • Sie könnten aus Ihren Funktionen ein Paket machen und diese mit Needs oder & lt; & lt;
  • Das mache ich normalerweise nicht. Ich entscheide mich für ein monolithisches Notizbuch, das alles enthält (schön mit Abschnitten und Unterabschnitten überlagert, so dass man es auf- oder zuklappen kann) oder für ein Paket + ein etwas schlankeres Analyse-Notizbuch, abhängig vom Wetter und einigen anderen versteckten Variablen.
Sjoerd C. de Vries 13.06.2011 17:44
quelle

Tags und Links