【问题标题】:How can I write a for loop (in matlab) that makes each row into an individual struct?如何编写一个 for 循环(在 matlab 中),将每一行变成一个单独的结构?
【发布时间】: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


    【解决方案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{:});
    

    【讨论】:

    • 是的!这行得通!非常感谢您的说明和代码!
    • 如果不是太多,我可以问你如何转置每个结构吗?因为最终我需要 80 x 1 而不是 1 x 80。
    • 当然。只需在Y = squeeze(num2cell(X,2)); 之后添加Y = cellfun(@transpose,Y,'UniformOutput',0); - 我也编辑了我的答案。
    • 太棒了!这行得通!非常感谢。希望你今天玩得开心!
    【解决方案2】:

    只需几行代码,无需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 矩阵

    【讨论】:

    • 非常感谢!对此,我真的非常感激!我刚试了一下,它确实给了我一个 102 x 2 和 1x 80 的矩阵。你必须原谅我对代码缺乏理解。但是有没有办法转置矩阵,以便我得到一个 80 x 1 的矩阵?
    • 是的!你太棒了。希望你度过了美好的一天!
    • 很高兴能帮上忙 :)
    猜你喜欢
    • 2019-06-21
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多