【问题标题】:Reshape structure into a matrix without for loop将结构重塑为没有 for 循环的矩阵
【发布时间】:2017-07-25 09:10:39
【问题描述】:

我有一个结构(数据),它由 322 个单元格和 296(特征)*2000(时间点)组成。我想要一个每个时间点的矩阵,它由试验^特征^时间点(322 * 296 * 2000)组成。我目前正在做的并且也可以正常工作的是使用 for 循环:

for k=1:size(data.trial{1,1},2)
    for i= 1:length(data.trialinfo)
        between=data.trial{1,i}';
        data(i,:,k)=between(k,:);
    end
end

谁能想到更快的方法来做到这一点?因为随着矩阵的增加,它需要很长时间。

谢谢!

卡洛斯

【问题讨论】:

  • 你试过reshape功能吗?
  • 也看cell2mat
  • 哦,是的——我应该提到这一点,但我已经尝试了很多变体,但它从来没有给我相同的结果;例如:reshape(cell2mat(data.trial)',[322,296,2000]);

标签: matlab matrix reshape


【解决方案1】:

试试:

data2 = permute(reshape([data.trial{:}],296,2000,322),[3,1,2]);

reshape 的问题在于它在列中思考,因此您需要在后面加上permute(即 3D 转置),因为这就是您在循环中设置输出变量的方式。我使用串联而不是cell2mat 来提高速度。

我认为这是样本数据:

for ii= 1:322
    data.trial{1,ii} = rand(296,2000);
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    相关资源
    最近更新 更多