如何编写一个for循环(在matlab中),使每一行成为一个单独的结构?

时间:2017-05-10 12:15:47

标签: matlab for-loop matrix struct cell

我目前有102 x 80 x 2矩阵(102个科目x 80个试验x 2个会话)。我想将这个矩阵的每一行都放入它自己的结构中。所以最后我想要102 x 2结构(102个主题和2个会话)。在每个结构中,应该有80 x 1行。

如何编写一个将每行分隔成自己的结构的for循环?

提前感谢您的帮助。

2 个答案:

答案 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{:});

enter image description here

答案 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矩阵