【发布时间】:2017-10-09 02:07:42
【问题描述】:
我目前有一个 102 x 80 x 2 矩阵(102 名受试者 x 80 次试验 x 2 次会议)。我想把这个矩阵的每一行变成它自己的结构。所以最后我想要 102 x 2 结构(102 个主题和 2 个会话)。在每个结构中应该有 80 x 1 行。
如何编写一个 for 循环将每一行分隔成自己的结构?
提前感谢您的帮助。
【问题讨论】:
标签: 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 循环将每一行分隔成自己的结构?
提前感谢您的帮助。
【问题讨论】:
标签: matlab for-loop matrix struct cell
您可以使用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{:});
【讨论】:
Y = squeeze(num2cell(X,2)); 之后添加Y = cellfun(@transpose,Y,'UniformOutput',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 矩阵
【讨论】: