2012-01-31 13 views
5

He estado leyendo la documentación para usar el contenedor de Matlab. Trazar para construir algo similar a un diccionario de Python, pero estoy teniendo problemas y esperaba que alguien pudiera arrojar algo de luz.MATLAB: extendiendo la lista de valores en el objeto container.Map

¿Hay alguna forma de ampliar el contenido de la lista de valores asignada a una determinada clave? por ejemplo, digamos que para el mapa "mapa", la clave "1234" tengo un valor de "1.0".

map(1234) = 1.0 

me gustaría ampliar la lista de valores de [1,0 2,0], y la forma en que trato de hacer esto es

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

pero recibo un error que dice "Error al utilizar containers.Map/ subsasgn. El tipo de valor especificado no coincide con el tipo esperado para este contenedor. "

¿No puedo asociar matrices como valores a una clave de mapa?

¡Muchas gracias!

Respuesta

7

Las matrices no escalares se admiten correctamente si ValueType es 'any'. Parece que el problema no es la técnica que está utilizando para extender, sino la clave o el tipo de valor.

Cuando utiliza el constructor que toma una clave y un valor, deduce la clave y el tipo de valor de los valores pasados. Si el valor es doble escalar, deduce que el tipo es "doble". Eso no admite matrices no escalares.

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

El constructor por defecto containers.Map tendrá 'carbón' KeyType y ValueType 'ninguna'. Eso tendrá el comportamiento de extensión que desee, pero tendrá que usar las teclas de caracteres en su lugar. Utilice el formulario de constructor para establecer explícitamente los tipos de clave y valor en 'double' y 'any', y funcionará de la manera que desee.

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

gracias Andrew, la forma en que fue inicializado como esto: – JoeMcG

+0

gracias Andrew, la forma en que fue inicializado como esto: 'mapa = containers.Map (1234,1.0)' es también ¿Es posible indexar dentro de esta matriz sin copiar el mapa ('1234') a una nueva variable? – JoeMcG

+0

Mi error: parece que ValueType 'double' solo acepta dobles escalares como valores. Puedo reproducir Cámbielo para tener ValueType 'any' usando la llamada de constructor en mi respuesta, o inicializando con una matriz no escalar como 'map = containers.Map (1234, [1.0 2.0]);' y funcionará. –