2017-01-27 4 views
0

Matlabのcontainers.Mapオブジェクトに次の問題があります。 数字キーと値を持つ単純なオブジェクトの作成:containers.Mapは数字キーでは機能しません

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

期待通りに動作しますが、

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

が鍵タイプので、私が期待していないと理解していないエラーを与えます明らかに正しいです。

何か間違っていますか?

+1

[この質問](http://stackoverflow.com/questions/17685364/matlab-specified-value-type-does-not-match-the-type-expected-for-this-container)あなたを指摘する可能性があります正しい道。 –

+0

[Matlab:指定された値の型がこのコンテナに予想される型と一致しません](http://stackoverflow.com/questions/17685364/matlab-specified-value-type-does-not-match-the-type -expected-for-this-container) – excaza

答えて

1

containers.Map

デフォルトの建設がkeySetのキーのデータ型、(ここではdouble)によって決定kTypeを使用しています。 1:2は、1×2の行列であるので、キーとして使用することはできませんあなたの例では

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

containers.Mapは以外KeyType何の事を持つことはできません。

+0

'1:2'もdouble型ですね。 – user1618022

+0

@ user1618022 doubleの行列。残念ながら、ベクトル化はここでは機能しません。 – P0W

1

あなたはcontainers.mapでキーとして許可されていないの1x2行列を供給している

m(1:2) 

であなたのコンテナを呼び出します。 Matlabでは、マップクラスの複数のキーに基づいて複数の値をベクトル化してベクトル化することはできません。

コードがマップクラスに大きく依存していて、複数のキーを頻繁に抽出する必要がある場合は、マップクラスの使用を再検討することをお勧めします。

Yair Altmanの書籍Accelerating Matlab Performanceの「containers.mapの使用を避ける」セクションを参照してください。

関連する問題