あなたがしたいことは、実際に使用してからstruct2array
結果を平坦化することです。
A = reshape(struct2array(test), [], 1);
% 1
% 2
% 3
% 4
% 5
% 6
基準
フォローアップとして、 と の使用法を比較するベンチマークを少し実行しstruct2cell
ましたstruct2array
。cell2mat(struct2cell())
1) セル配列で動作しており、2) 遅いことで有名な数値配列ではなくセル配列を使用しているため、このメソッドは遅くなると予想されます。テストの実行に使用したスクリプトは次のとおりです。
function tests()
sizes = round(linspace(100, 100000));
times1 = zeros(size(sizes));
times2 = zeros(size(sizes));
for k = 1:numel(sizes)
sz = sizes(k);
S = struct('one', rand(sz, 1), 'two', rand(sz, 1));
times1(k) = timeit(@()cellbased(S));
times2(k) = timeit(@()arraybased(S));
end
figure;
plot(sizes, cat(1, times1 * 1000, times2 * 1000));
legend('struct2cell', 'struct2array')
xlabel('Number of elements in S.a and S.b')
ylabel('Execution time (ms)')
end
function C = cellbased(S)
C = cell2mat(struct2cell(S));
end
function C = arraybased(S)
C = reshape(struct2array(S), [], 1);
end
そしてその結果 (R2015b)
