Tengo una matriz de celdas allData
que es Nx1. Cada celda contiene una estructura con una propiedad names
(el nombre es un objeto personalizado, pero piense en ello como una matriz de celdas de cadenas si lo desea). Me gustaría crear una única matriz de células que contenga todos los nombres. Por ejemplo, si N = 3, de modo que allData
es una matriz de células de 3x1, a continuación, la siguiente lograría mi objetivo:¿Cómo concatena matrices de celdas que son parte de una matriz de celdas en MATLAB?
A = allData{1};
B = allData{2};
C = allData{3};
allNames = [A.names B.names C.names];
El problema con este enfoque es que N es grande y cambia en función de la entrada, por lo Espero que haya una forma inteligente de hacerlo utilizando cellfun
, pero todo lo que he intentado falla (por ejemplo, no funciona para hacer allNames = [cellfun(@(x) {x.names}, allData)];
).
ACTUALIZACIÓN: Gracias a las soluciones sugeridas, puedo obtener todo en una matriz de celdas donde cada celda contiene una matriz de celdas. Mi objetivo aquí es concatenar estos. Más o menos, lo que tengo es:
{A.names B.names C.names}
y lo que yo quiero y parece que no puede conseguir es
{A.names{1} A.names{2} ... A.names{end} B.names{1} ... B.names{end} ...}
SOLUCIÓN: que necesitaba piezas de cada respuesta a continuación, así que aquí está la solución que funcionó para mí:
de Andrew Lazarus:
allNames = arrayfun(@(x) x.name, [allData{:}], 'UniformOutput', false);
entonces, a partir gnovice:
allNames = vertcat(allNames{:});
Gracias a los dos !!
son el escalar estructuras (es decir, 1 por 1), ¿o pueden ser estructuras * matrices *? – gnovice
Sí, las estructuras son 1x1. – PengOne