WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Dictionary mit Tuple als Key

 

Johannson
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 02.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.01.2016, 14:51     Titel: Dictionary mit Tuple als Key
  Antworten mit Zitat      
Hallo zusammen,

ich würde gerne in meinem Matlabcode ein Dictionary mit einem Tuple als Code deklarieren.
Im Moment benutze ich "containers.Map".
Allerdings schaffe ich es nicht den Key als "Tuple" bzw. als Vektor zu deklarieren.
Hintergrund ist, dass ich für ein zweidimensionales Gitter, Werte für jeden Punkt abspeichern möchte.
Hier mein Code:

Code:
keySet =   {[0 1], [0 2], [0 3], [0 4]};
valueSet = [100, 368.2, 197.6, 178.4];
mapObj = containers.Map(keySet,valueSet);


Fehlermeldung: "Unsupported key specified. See documentation for valid key types."

Vielen Dank im Vorraus für die Hilfe.
Grüße Johannes
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.01.2016, 15:05     Titel: Re: Dictionary mit Tuple als Key
  Antworten mit Zitat      
Hallo Johannson,

Die Fehlermeldung bedeutet, dass ein Cell-Vektor, der Double-Vektoren enthält, kein valider Key ist.

Dein Beipiel sieht so aus, als wäre dies bereits eine hinreichend präzise Darstellung:
Code:
valueSet = [100, 368.2, 197.6, 178.4];

Wenn Du dann auf den Wert bei [0,2] zugreifen möchtest:
Code:
value = valueSet([0,1] + 1);

Das ist zwar ein paar Leven einfacher als der Ansatz mit den container.Maps, aber vielleicht ist es ausreichend um das eigentliche Problem zu lösen?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Johannson
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 02.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.01.2016, 16:10     Titel:
  Antworten mit Zitat      
Hallo,

erst einmal vielen Dank für die Antwort.

Deine Lösung gibt mir allerdings ein Array zurück in dem dann die erste Zahl und die zweite Zahl drinsteht.

Außerdem wird das Array noch deutlich größer sodass dann sehr viele Zahlen in dem Array stehen.

Gibt es die Möglichkeit den Wert einzeln abzufragen?

Vielen Dank.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.01.2016, 19:46     Titel:
  Antworten mit Zitat      
Hallo Johannson,

Zitat:
Deine Lösung gibt mir allerdings ein Array zurück in dem dann die erste Zahl und die zweite Zahl drinsteht.

Das verstehe ich nicht. In dem Array stehen alle 4 Zahlen drin und statt eines "valueKey" wird der Index verwendet.

Zitat:
Außerdem wird das Array noch deutlich größer sodass dann sehr viele Zahlen in dem Array stehen.

Das haben Arrays so an sich. Es spricht nichts dagegen große Arrays zu erzeugen.

Zitat:
Gibt es die Möglichkeit den Wert einzeln abzufragen?

Ja, nämlich genau der, den ich bereits gezeigt hatte.

Wo liegt genau das Problem? Welche Input-Daten hast Du und wie möchtest Du später darauf zugreifen? Vielleicht wäre auch ein sparse Array sinnvoll. Jedenfalls sie Dein valueKey {[0 1], [0 2], [0 3], [0 4]} sehr danach aus, als könnten dies Indices sein. Und dann wäre ein einfaches indiziertes Array einfach sehr naheliegend. Oder geht es auch um valueKeys wie {[0, 1], [0, 1e6], [1e200, 3], [-pi, -1e100]}?
Bitte erkläre also nochmal genauer, was Du erreichen möchtest. Erst dann kann man wirklich gute Vorschläge dazu machen, in welcher Form Du die Daten abspeichern kannst.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Johannson
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 02.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2016, 12:49     Titel:
  Antworten mit Zitat      
Hallo,

sorry wenn ich mich unklar ausdrücke. Ich versuche das jetzt nochmal zu erklären.
Eigentlich ist das Problem relativ simpel.

Ich habe für ein numerisches Verfahren ein zweidimensionales Gitter. Bsp: 10x30
An jeder Stelle steht eine Temperatur.
Jetzt möchte ich das Problem mit dem SOR-Verfahren lösen.
Dafür soll das zweidimensionale Gitter auf einen eindimensionalen Vektor sortiert werden.
Damit ich die einzelnen Werte später aber schnell wieder ansteuern kann wollte ich das in einem Dictionary speichern. Das heißt:

Key Value
[0 1] 200
[0 2] 250
...
[0 10] 300
[1 0] 250
...

Es geht mir also darum die Werte in einem eindimensionalen Vektor zu speichern und diese aber schnell ansprechen zu können mit dem Key.

Ich hoffe das ist verständlich.
Vielen Dank.
Grüße Johannes
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 03.01.2016, 16:18     Titel:
  Antworten mit Zitat      
Hallo Johannson,

Ein einfacher numerischer Vektor und eine lineare Indizierung ist sicherlich die schnellste Methode.

Code:
nRow= 10;
K = nRow + 1;
Value = [200, 250, ... 300, 250];
SearchedKey = [0,9];  % z.B.

% Komapkt:
SearchedValue = Value(SearchedKey * [K; 1]);

% Oder explizit und wohl schneller:
SearchedValue = Value(SearchedKey(1) * K + SearchedKey(2));

Intern müssen bei Container.Maps so viele Umwege gemacht werden, dass dies vermutlich 10 oder 100 mal langsamer ist.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Johannson
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 02.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2016, 19:38     Titel:
  Antworten mit Zitat      
Ales klar.

Dann werde ich das damit mal ausprobieren.

Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.