|
|
Korrelation von 2 Variablen auf Gitternetz (lat x lon) |
|
stevorino |

Forum-Fortgeschrittener
|
 |
Beiträge: 95
|
 |
|
 |
Anmeldedatum: 06.12.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007b
|
 |
|
|
 |
|
Verfasst am: 06.12.2011, 19:02
Titel: Korrelation von 2 Variablen auf Gitternetz (lat x lon)
|
 |
Hallo,
Ich habe 2 mal 12 dateien (jeweils Jänner bis Dezember) mit jeweils einem Wert für insgesamt 15 Gitterzellen (5°x5°). Ich möchte für jede Gitterzelle einen Jahresgang für die beiden Werte und anschließend einen Korrelationskoeffizienten zwischen den beiden Werten berechnen. Am Ende soll eine neue Datei entstehen. Anbei eine Beispieldatei (eine von insgesamt 24).
Danke im Voraus,
stno
Beschreibung: |
|
 Download |
Dateiname: |
beispiel.txt |
Dateigröße: |
647 Bytes |
Heruntergeladen: |
291 mal |
|
|
|
|
|
stevorino |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 95
|
 |
|
 |
Anmeldedatum: 06.12.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007b
|
 |
|
|
 |
|
Verfasst am: 07.12.2011, 12:09
Titel:
|
 |
Ich denke ich verstehe den Prozess, der ablaufen soll, aber bei der Umsetzung hapert es ein wenig. Ich habe Schwierigkeiten beim einlesen der Dateien. Es sollen ja nur die 15 Zahlenwerte in die Berechnung einfließen. Und die Enddatei soll dann genauso ausehen wie die Beispielsdatei, nur eben mit den berechneten Korrelationswerten. Mit Excel konnte ich das lösen, dauerte etwas ... möchte das dann eventuell öfters anwenden, deshalb besser mit einem Programm.
Für Hilfe jeglicher Form wäre ich dankbar, indes versuche ich es selbst.
Stno
|
|
|
stevorino |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 95
|
 |
|
 |
Anmeldedatum: 06.12.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007b
|
 |
|
|
 |
|
Verfasst am: 16.12.2011, 18:34
Titel:
|
 |
ok ... hab jetzt nach längerer MATLAB Selbststudium eine Idee. Ich möchte die 2 mal 12 2 dimensionalen arrays, die ich jetzt schon eingelesen habe, zu jeweils einem multidimensionalen array umbauen. Wenn ich das gemacht habe (das schaff ich hoffentlich), wie kann ich dann zwischen diesen beiden 3D arrays einen corrcoef rechnen, so dass ich am Ende ein zweidimensionales array mit den Korrelationskoeffizienten bekomme.
Es ist mir wirklich wichtig, vielleicht kann mir jemand dabei weiter helfen?
Danke im voraus,
stno
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 16.12.2011, 19:06
Titel:
|
 |
Hallo stevorino,
Du bekommst wahrscheinlich mehr Hilfe, wenn Du konkrete Fragen stellst.
Aus den Worten "zu jeweils einem multidimensionalen Arrays umbauen" kann man nicht schließen, was Du konkret vorliegen hast. Und ohne die Inputs zu kennen, kann man nicht erraten, wie man daraus einen CORCOEFF berechnen kann.
Gruß, Jan
|
|
|
stevorino |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 95
|
 |
|
 |
Anmeldedatum: 06.12.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007b
|
 |
|
|
 |
|
Verfasst am: 16.12.2011, 21:01
Titel:
|
 |
|
 |
|
Hallo Jan,
Danke für die Antwort.
Ok, ich versuche es noch einmal genauer zu formulieren.
Ich habe 2x12 Dateien als Matrizen (36,72) eingelesen. Also die Weltkarte in 5x5° Gitterzellen. 36x5=180 (Breitengrad) und 72x5=360 (Längengrad). 1x12 Matrizen mit 36x72=2592 Werten in den 5x5° Gitterzellen und 1x12 Matrizen mit 36x72=2592 Werten in den 5x5° Gitterzellen.
Diese zweidimensionalen arrays möchte ich nun zu 2 multidimensionalen arrays zusammenfassen, eben aus den 2x12 Matrizen. Ich stelle mir da immer 2x12 karierte A4 Blätter vor die übereinander liegen. Naja und wenn ich 2xmultidimensionale arrays (mit je 12 zweidimensionalen arrays) habe, dann möchte ich die Veränderung jeder einzelnen Gitterzelle des einen multidimensionalen arrays mit der Veränderung jeder einzelnen Gitterzelle des anderen multidimensionalen arrays KORRELIEREN. Das Ergebnis soll dann ein zweidimensionales array (36,72) sein, in dem die Korrelationswerte für jede der 2592 Gitterzellen eingetragen sind. Es gibt übrigens auch Gitterzellen mit keinem Wert, also NaN.
Etwas lange, aber ich hoffe verständlich. Und ich habe nichts dazu gefunden, wie man zwei multidimensionale arrays miteinander korrelieren kann.
stno
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 16.12.2011, 23:38
Titel:
|
 |
|
 |
|
Hallo stevorino,
Ich zumindest kann Dir nicht folgen.
Ich verstehe nicht, wieso Du "2x12" schreibst und nicht 24. Was unterscheidet die beiden Spalten - und ist dieses Detail überhaupt wichtig für die Lösung Deines Problems? Andere Details sind sicherlich überflüssig und lenken nur ab: "5x5°" erwähnst Du dreimal, "36x72=2592" zweimal, aber beides ist eigentlich egal, oder?
Du hast also 24 Matrizen der Größe [36x72] mit irgendwelchen Werten, die auch NaN sein können. Möglicherweise ist es wichtig, dass dies zwei Gruppen a 12 Matrizen sind.
Jetzt möchtest Du multi-dimensionale Arrays bilden - mit welcher Dimension?
[36x72x2x12] oder 2 Arrays zu [36x72x12] oder wie?
Aber nun zur eigentlichen Berechnung, die, soweit ich das verstehe, das Problem ist, das Du lösen möchtest:
Zitat: |
Naja und wenn ich 2xmultidimensionale arrays (mit je 12 zweidimensionalen arrays) habe, dann möchte ich die Veränderung jeder einzelnen Gitterzelle des einen multidimensionalen arrays mit der Veränderung jeder einzelnen Gitterzelle des anderen multidimensionalen arrays KORRELIEREN. |
Was ist "die Veränderung einer Gitterzelle"? Und was genau ist die Korrelation zwischen einem Wert mit allen Werten einer anderen Matrix?
Gruß, Jan
|
|
|
stevorino |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 95
|
 |
|
 |
Anmeldedatum: 06.12.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007b
|
 |
|
|
 |
|
Verfasst am: 17.12.2011, 00:06
Titel:
|
 |
|
 |
|
Hallo Jan,
Ok ich gebe zu, ich tu mir etwas schwer, es zu beschreiben. Wahrscheinlich, weil ich eher noch ein MATLAB(Programmier)-Anfänger bin ...
Zitat: |
Du hast also 24 Matrizen der Größe [36x72] mit irgendwelchen Werten, die auch NaN sein können. Möglicherweise ist es wichtig, dass dies zwei Gruppen a 12 Matrizen sind.
Jetzt möchtest Du multi-dimensionale Arrays bilden - mit welcher Dimension?
[36x72x2x12] oder 2 Arrays zu [36x72x12] oder wie? |
Ja es ist wichtig, dass es zwei Gruppen a 12 Matrizen sind, weil diese beide Gruppen miteinander verglichen (korreliert) werden sollen, also 2 arrays zu [36x72x12].
Zitat: |
Was ist "die Veränderung einer Gitterzelle"? |
Ich meine damit einfach, dass [1,1,1] ein anderer Wert als [1,1,2], [1,1,3], ..., [1,1,12] ist. Und diese Veränderung (od. Trend, oder wie auch immer man es nennen möchte, mir fällt scheinbar nicht das richtige Wort ein) möchte ich mit [1,1,2] bis [1,1,12] der anderen Gruppe korrelieren, und das für alle 2592 Zellen.
Viele Grüße,
Stno
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 17.12.2011, 23:06
Titel:
|
 |
Hallo stevorino,
Kanst Du die Beschreibung der "Veränderung einer Gitterzelle" als mathematische Formel ausdrücken? Mir wird es nämlichimmer noch nicht klar.
Der Skalar [1,1,1] unterscheidet sich von [1,1,2:12]. Aber was ist dabei "diese Veränderung"? Möchtest Du die Werte subtrahieren? Und dann möchtest Du dies mit [1,1,2:12] der anderen Gruppe "korrelieren". Ist das die lineare Correlation mit CORR, so dass Du eine 11x11 Matrix erhälst?
Gruß, Jan
|
|
|
stevorino |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 95
|
 |
|
 |
Anmeldedatum: 06.12.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007b
|
 |
|
|
 |
|
Verfasst am: 18.12.2011, 00:46
Titel:
|
 |
Hallo Jan,
Ich möchte (1,1,1:12) des einen multidimensionalen arrays mit (1,1,1:12) des anderen multidimensionalen arrays korrelieren mit corrcoef. Und das für alle 2592 (nennt man es hier Vektoren? oder 3dimensionale Zellen?) ... also auch (1,2,1:12) des einen mit (1,2,1:12) des anderen, (1,3,1:12) des einen mit (1,3,1:12) des anderen, ... , (36,72,1:12) des einen mit (36,72,1:12) des anderen
Das Ergebnis soll eine zweidimensionale Matrix (36,72) mit den Korrelationskoeffizienten sein.
Viele Grüße,
Stefan
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 18.12.2011, 13:30
Titel:
|
 |
Hallo Stefan,
Ich glaube, ich habe das Problem ungefähr verstanden. Wie versuchst Du es in Matlab zu lösen und welche konkreten Probleme treten dabvei auf?
Zur Nomenklatur:
Ein [1x1] Array heißt "skalar". Es besteht aus einem "Element".
Ein [Nx1] Array ist ein "Spalten-Vektor" aus N "Elementen".
[1xN] ist ein Zeilen-Vektor.
Ein [MxN] Array heißt Matrix.
Ein [MxNxP] Array heißt einfach nur noch "Array", um genau zu sein ein 3D-Array. Daraus kann man "Untermatrizen" und "Untervektoren" schneiden.
Auch ein [1x1xP] Array nennt man "Vektor", man sollte dabei die spezielle Dimension aber explizit nennen.
Gruß, Jan
|
|
|
stevorino |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 95
|
 |
|
 |
Anmeldedatum: 06.12.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007b
|
 |
|
|
 |
|
Verfasst am: 18.12.2011, 13:51
Titel:
|
 |
Hallo Jan,
Danke für die Nomenklatur.
Da ich jetzt schon 2 3D-Arrays gebildet habe, möchte ich im letzten Schritt jeden einzelnen Untervektor (z.B. [1,1,12]) des einen 3D-Arrays mit dem zugehörigen Untervektor (in dem Fall [1,1,12]) des anderen 3D-Arrays korrelieren. Und das für alle 2592 Untervektoren, was dann als Ergebnis eine [36,72] Matrix mit den (2592) Korrelationskoeffizienten liefern soll.
Mir fällt im Moment einfach (noch) nicht ein, wie ich das programmieren soll, das MATLAB es für alle 2592 Werte macht. Kann ich das mit corcoeff machen? Weißt Du, wie ich das lösen könnte?
Viele Grüße,
Stefan
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 18.12.2011, 14:44
Titel:
|
 |
Hallo Stefan,
Wenn Du einen Befehl auf alle Elemente eines Arrays anwenden möchtest, sind FOR-Schleifen das Mittel der Wahl.
Versuche dies mal und stelle konkrete Fragen zur Programmierung, wenn Probleme auftreten.
Gruß, Jan
|
|
|
stevorino |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 95
|
 |
|
 |
Anmeldedatum: 06.12.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007b
|
 |
|
|
 |
|
Verfasst am: 19.12.2011, 19:21
Titel:
|
 |
Hallo Jan,
Danke für den FOR-Schleifen-Hinweis.
Ich habe es mit der FOR-Schleife versucht, aber es kommt hier leider eine Fehlermeldung.
A und B sind die beiden multidimensionalen Arrays ...
Viele Grüße,
Stefan
EDITED: Mit der Code-Umgebung werden keine Smileys mehr im Code dargetsellt.
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 19.12.2011, 23:47
Titel:
|
 |
Hallo Stefan,
Bitte poste immer auch die Fehlermeldung. Dann müssen wir nicht raten.
CORRCOEF gibt eine Matrix zurück, oder? Und R(i,j) ist ein Skalar.
U.a. deshalb wird mit nicht klar, was Du berechnen möchtest. Kannst Du die entsprechenden mathematischen Formeln posten?
Gruß, Jan
|
|
|
stevorino |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 95
|
 |
|
 |
Anmeldedatum: 06.12.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007b
|
 |
|
|
 |
|
Verfasst am: 20.12.2011, 10:26
Titel:
|
 |
Hallo Jan,
Viele Grüße,
Stefan
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|