/ / Matlab OOP accediendo a las propiedades desde una matriz de objetos - arrays, oop, matlab, matrix

Matlab OOP acceder a las propiedades desde una matriz de objetos - arrays, oop, matlab, matrix

Lo nuevo en Matlab viene de C / C ++ ......

Tengo una matriz de objetos y estoy tratando de acceder a los valores de cada objeto en la matriz y concatenarlos en una variable.

Class sample
properties(GetAccess = "public", SetAccess ="public")
ID;
Value;
end

methods
function obj = sample(id, value)
obj.ID = id;
obj.Value = value;
end
end
end

Luego hago una matriz que contiene algunos de los objetos.

x = sample.empty(3,0);
x(1) = sample(1,3);
x(2) = sample(1,4);
x(3) = sample(1,5);

Luego quiero obtener todos los valores de los objetos y almacenarlos en una nueva matriz.

y = x(:).Value;

Sin embargo, esto falla y solo pone el valor de x (3) en y ..... y:

y(:) = x(:).Value;

Lanza un error.

Cualquier ayuda sería apreciada. Sé que podría hacer esto con bucles, pero estoy tratando de hacerlo de la manera más rápida y eficiente.

Respuestas

5 para la respuesta № 1

Simple pero no intuitivo

y=[x.Value]

¿Por qué? Bien x.Value no es un bloque de memoria contiguo, por lo que no se puede asignar directamente a una matriz. Vocación x.Value devuelve el miembro de datos de valor de cada uno x objeto a su vez. Matlab trata esto como operaciones separadas. Al encerrar la llamada en [] le está diciendo a matlab que formule una matriz contigua concatenando cada resultado. Esto puede ser asignado a una serie de dobles, y.

EDITAR:

Con respecto a su comentario, el código anterior funciona bien si x es de diferente longitud en diferentes objetos, es decir. .

x(1) = sample(1,3);
x(2) = sample(1,[4 5 6]);
x(3) = sample(1,[20 10]);

Entonces

>> [x.Value]

ans =

3     4     5     6    20    10

Si quiere decir que desea que "y" sea un vector de final irregular, como es posible con un vector de vectores en C ++, debe usar la notación de matriz de celdas (llaves)

>> y = {x.Value}

y =

[3]    [1x3 double]    [1x2 double]