Извлечь единую структуру из структуры массивов Matlab - PullRequest
1 голос
/ 12 декабря 2011

Предположим, мне дана структура массивов, например:

.
s = 

foo: [3x3 double]
bar: [3x1 double]

Существует ли простой способ извлечь структуру с теми же именами полей, что и s, и с каждым полем, заполненным ix-й строкой того же поля в s? Я могу предположить, что каждое поле имеет одинаковое количество строк. Учитывая вышесказанное, я мог бы сделать

ix = 1;
s1.foo = s.foo(ix, :);
s1.bar = s.bar(ix, :);

Но если s имеет более пары полей, это становится громоздким. Есть ли функция, которая будет делать эквивалент, а-ля s1 = extractstruct(s, ix)?

1 Ответ

1 голос
/ 12 декабря 2011

Это не так коротко, как s1 = extractstruct(s, ix), но я бы сделал это:

s.foo = rand(3);
s.bar = rand(1,3);
xi=1;

s2=reshape([fieldnames(s)'; cellfun(@(x) x(xi,:),struct2cell(s)','UniformOutput',0)],1,[]);
s2=struct(s2{:})


s2 = 

    foo: [0.8147 0.9134 0.2785]
    bar: [0.7922 0.9595 0.6557]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...