Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 对于parfor,表的垂直连接太慢_Matlab - Fatal编程技术网

Matlab 对于parfor,表的垂直连接太慢

Matlab 对于parfor,表的垂直连接太慢,matlab,Matlab,我遇到了表的垂直连接的速度问题,每个表都是parfor循环的一部分 我是这样做的: T = table(group1, group2, val1, val2, ...); T = sortrows(T, {'group1', 'group2'}); % possible speed gains from sorting? [Pairs, idx] = unique([T.group1, T.group2], 'rows'); idx1 = [idx; height(T)+1]; % to in

我遇到了表的垂直连接的速度问题,每个表都是parfor循环的一部分

我是这样做的:

T = table(group1, group2, val1, val2, ...);
T = sortrows(T, {'group1', 'group2'}); % possible speed gains from sorting?
[Pairs, idx] = unique([T.group1, T.group2], 'rows');

idx1 = [idx; height(T)+1]; % to include the last index
idx2 = idx1(2:end) - 1;
idx1 = idx1(1:end-1);

T_ = [];
parfor i=1:length(Pairs)
    tmpIdx = idx1(i):idx2(i);
    T_ = T(tmpIdx, :);
    T__ = myFun(T_);
    T_ = [T_; T__];
end

function T_out = myFun(T_in)
    vlist = T_in.Properties.VariableNames;
    T_out = T_in(:, vlist) % preallocation

    % overwrite values
    for i = 1 : length(vlist)
        T_out.vlist(2:end, i) = T_in{1:end-1, vlist{i}};
    end
end
myFun()
中,我对
T.val1,T.val2…
进行了一些计算。不过,上面的速度太慢了。我检查了探查器,发现大部分时间都花在

1)
T=T(tmpIdx,:)
tabular.vertcat

2)
T_out.vlist(2:end,i)=T_.vlist{1:end-1,vlist{i}
inside
myFun
tabular.subsasgn,tabular.subsref

对于1),尽管速度很慢,我想切片
T
是不可避免的,因为我正在计算
T.group1
T.group2
的值w.r.T.唯一对

虽然主要问题是1),但花在2)上的时间也很重要


有改进的好主意吗?任何评论/建议都会非常有用。

尽管我非常喜欢使用表(主要是因为易于识别列),但根据我的经验,索引到表中的速度很慢,如果必须索引到表中的次数超过几次,最好将数据复制到矩阵中(假设表中的所有数据都是数字)操作矩阵,然后在最后重建一个输出表。谢谢你在这里的注释@PhilGoddard.
N>1e+4
,它看起来足够大了。也许我应该将表拆分为字符串和数字,用数字进行计算,并在末尾添加标签。尽管我非常喜欢使用表(主要是因为易于识别列),根据我的经验,索引到列中的速度很慢,如果必须索引到列中超过几次,则最好将数据复制到矩阵中(假设表中的所有数据都是数字)操作矩阵,然后在最后重建一个输出表。感谢您在这里的注释@PhilGoddard.
N>1e+4
,它似乎足够大。也许我应该将表拆分为字符串和数字,用数字进行计算,并在末尾添加标签。