У меня есть структура 10 x 10 с четырьмя полями a, b, c, d.Как преобразовать структуру в матрицу
Как преобразовать эту структуру в матрицу 10 x 10 с элементами только из поля a?
У меня есть структура 10 x 10 с четырьмя полями a, b, c, d.Как преобразовать структуру в матрицу
Как преобразовать эту структуру в матрицу 10 x 10 с элементами только из поля a?
Вы можете рассчитывать на то, что str.a
возвращает comma-separated list , Поэтому мы можем объединить значения вместе и изменить размер результирующего массива на тот же размер, что и входная структура.
% If a contains scalars
out = reshape([str.a], size(str));
% If a contains matrices
out = reshape({str.a}, size(str));
Один лайнер раствор
res = cellfun(@(strctObj) strctObj.a,str,'UniformOutput',false);
Дальнейшее объяснение
Определить функцию в одну строку, которая извлечь значение.
getAFunc = @(strctObj) strctObj.a;
использование функции cellfun MATLAB, чтобы применить его на клетку и извлечь матрицу:
res = cellfun(@(strctObj) getAFunc ,strctCellObj,'UniformOutput',false);
Пример
%initializes input
N=10;
str = cell(N,N);
for t=1:N*N
str{t}.a = rand;
str{t}.b = rand;
str{t}.c = rand;
str{t}.d = rand;
end
%extracts output matrix
res = cellfun(@(strctObj) strctObj.a,str,'UniformOutput',false);
Имеет ли поле только цифры? – TroyHaskin
Возможный дубликат [Извлечь поле массива структуры в новый массив] (http://stackoverflow.com/questions/12082746/extract-field-of-struct-array-to-new-array) – saastn