Ab sofort verwende ich 3 Notebook:
Wo ich alle Funktionen habe, die ich erstellt habe und die anderen Notebooks aufrufen.
Basierend auf den Originaldaten berechne ich Transformationen und füge Spalten / Liste
hinzuWenn 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.
Unter Verwendung der beiden obigen Objekte erstelle ich ein Manipulate-Objekt, mit dem ich die Daten analysieren kann.
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.
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:
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:
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:
Mit Save
werden die Zuweisungen selbst gespeichert; Um die Definitionen wiederherzustellen, verwenden Sie:
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:
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
:
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.
DumpSave
, Save
oder Put
erfolgen. Lesen Sie mit Get oder & lt; & lt; Needs
oder & lt; & lt; Tags und Links wolfram-mathematica function