将结构重塑为矩阵而不进行循环

时间:2017-07-25 09:10:39

标签: matlab matrix reshape

我有一个结构(数据),由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

有人能想到更快的方法吗?因为矩阵增加需要很长时间。

谢谢!

卡洛斯

1 个答案:

答案 0 :(得分:0)

尝试:

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