2012-01-31 6 views
5

Matlabのcontainer.Mapを使用するためのドキュメントを読んでいますが、Python辞書に似たようなものを作成していますが、いくつかの問題を抱えていて、MATLAB:container.Mapオブジェクト内の値リストを拡張する

特定のキーにマップされている値リストの内容を拡張する方法はありますか?例えば、マップ "地図"の場合、キー "1234"は "1.0"の値を持っています。

map(1234) = 1.0 

私は[1.0 2.0]に値のリストを拡張したい、と私はこれをやろう方法が

map = containers.Map(1234,1.0) 
map(1234) = [map(1234) 2.0] 

ですが、私はcontainers.Map/を使用して、「エラーというエラーを受け取ります指定された値の型がこのコンテナに予想される型と一致しません。

配列を値としてマップキーに関連付けることはできませんか?

多くの感謝!

答えて

7

非スカラー配列は、ValueTypeが 'any'の場合は問題なくサポートされます。問題はあなたが拡張するために使用しているテクニックではなく、キーまたは値のタイプであるように見えます。

キーと値を受け取るコンストラクタを使用すると、渡された値からキーと値の型が推測されます。値がスカラー倍であれば、その型は「倍精度」に推論されます。これは非スカラー配列をサポートしません。

>> map = containers.Map(1234, 1.0); 
>> disp(map.ValueType) 
double 

デフォルトcontainers.Mapのコンストラクタは、 '任意の' をKeyType「シャアとのValueTypeを持つことになります。それはあなたが望む拡張動作をしますが、代わりにcharキーを使用する必要があります。キーと値の型を明示的に 'double'と 'any'に設定するには、コンストラクタフォームを使用します。

map = containers.Map('KeyType','double', 'ValueType','any'); 
map(1234) = 1.0; 
map(1234) = [map(1234) 2.0]; 
+0

、あなたのアンドリューに感謝私は初期化の方法は、このようなものだった: – JoeMcG

+0

私は初期化の方法は、このようなものだった、アンドリューありがとう: 'マップ= containers.Map(1234,1.0)' もそれでありますmap( '1234')を新しい変数にコピーせずにこの配列内でインデックスを作成できますか? – JoeMcG

+0

私の間違い - ValueTypeのように見える 'double'はスカラ倍精度を値として受け付けるだけです。私は再現することができます。私の答えでコンストラクタ呼び出しを使用するか、 'map = containers.Map(1234、[1.0 2.0]); 'のような非スカラー配列で初期化することでValueType' any 'を変更しても動作します。 –

関連する問題