我目前有102 x 80 x 2矩阵(102个科目x 80个试验x 2个会话)。我想将这个矩阵的每一行都放入它自己的结构中。所以最后我想要102 x 2结构(102个主题和2个会话)。在每个结构中,应该有80 x 1行。
如何编写一个将每行分隔成自己的结构的for循环?
提前感谢您的帮助。
答案 0 :(得分:1)
您可以使用num2cell
将每行转换为单元格,然后使用deal
填充结构:
% random data
X = rand(102,80,2);
% convert each row into a cell
Y = squeeze(num2cell(X,2));
Y = cellfun(@transpose,Y,'UniformOutput',0); % transpose matrices
% initalize struct with desired size
s = struct([]);
s(size(Y,1),size(Y,2)).data = [];
% assign struct values
[s(:).data] = deal(Y{:});
答案 1 :(得分:0)
可以使用几行代码并且没有for
循环
% Define matrix
mat = rand(102, 80, 2);
% Define indices for the new struct matrix
[X, Y] = meshgrid(1:2, 1:102);
% Make a struct with your data
mat_struct = arrayfun(@(x, y) struct('data', mat(x, :, y).'), Y, X);
这里mat_struct是一个102x2数组,其数据字段各包含1x80矩阵