2017-01-27 2 views
0

Ich habe das folgende Problem mit einem containers.Map-Objekt in Matlab. Erstellen ein einfaches Objekt mit numerischen Tasten und Werten:containers.Map funktioniert nicht mit numerischen Tasten

m = containers.Map(1:3,2:4); 
>> m(1) 
ans = 
2 

Arbeiten wie erwartet, aber

>> m(1:2) 
Error using containers.Map/subsref 
Specified key type does not match the type expected for this container. 

gibt mir einen Fehler, ich erwarte nicht, und nicht verstehen, weil der Schlüsseltyp ist offensichtlich richtig.

Mache ich etwas falsch?

+1

[Diese Frage] (http://stackoverflow.com/questions/17685364/matlab-specified-value-type-does-not-match-the-type-expected-for-this-container) kann Sie zeigen der richtige Weg. –

+0

Mögliches Duplikat von [Matlab: Angegebener Werttyp stimmt nicht mit dem Typ überein, der für diesen Container erwartet wird] (http://stackoverflow.com/questions/17685364/matlab-specified-value-type-does-not-match-the-type -erwarte-für-diesen-container) – excaza

Antwort

1

Die containers.Map

Standardkonstruktion verwendet kType durch die Datentypen von Schlüsseln in keySet bestimmt, (hier double).

containers.Map nicht KeyType alles, was anderes ist als:

'char', 'double', 'single', 'int32', 'uint32', 'int64', or 'uint64'.

In Ihrem Beispiel 1:2 Matrix von 1x2 ist, kann so nicht als Schlüssel verwendet werden.

+0

'1: 2' ist auch vom Typ double, oder? – user1618022

+0

@ user1618022 Matrix von Doppel. Leider funktioniert die Vektorisierung hier nicht. – P0W

1

Wenn Ihr Behälter Aufruf mit

m(1:2) 

Sie eine 1x2-Matrix liefern, die nicht als Schlüssel in containers.map erlaubt ist. Matlab erlaubt nicht, das Abrufen mehrerer Werte basierend auf mehreren Schlüsseln in der Kartenklasse zu vektorisieren.

Wenn Ihr Code stark von der Kartenklasse abhängt und häufig mehrere Schlüssel extrahiert werden müssen, sollten Sie die Kartenklasse erneut prüfen.

Siehe Abschnitt "Vermeiden Sie containers.map" im Buch Accelerating Matlab Performance von Yair Altman.

Verwandte Themen