这个循环不能并行化。如果
flux_edge
是一个向量而不是矩阵,
accumarray
将有效地解决这个问题。试试这个:
Sdl (selfs) = accumarray(selfs, sdl_edge);
resCell = splitapply(@(c) {sum(c, 2)}, flux_edge, self);
res(:, self) = cat(2, resCell{:});
的值
自
人失踪。因此,我不能测试代码,我假设,它包含严重的错误。我假设您可以找到剩余的问题并修改代码,直到它解决您的需求。
如果问题是时间紧迫的(整个程序的瓶颈),我会编写一个C-mex函数。在细胞中积累并在之后加入它们对内存消耗没有效率。
的大小
自
很重要。首先收集相等的值可能更有效
独特的
然后在这个列表上运行循环:
v =独特(自);
SDL = 0 (1,7219);
Res = 0 (5,7219);
为4 = 1:元素个数(v)
av = v (iv);
掩码= (selfs == av);
sdl (av) =总和(sdl_edge(面具));
Res (:, av) = sum(flux_edge(:, mask), 2);
结束
如果这个有一个合理的速度,你可以把它并行化
parfor
.
v =独特(自);
nv =元素个数(v);
A = 0 (1, nv);
B = 0 (5, nv);
parfor4 = 1: nv
av = v (iv);
掩码= (selfs == av);
一笔(iv) = (sdl_edge(面具));
B(:, iv) = sum(flux_edge(:, mask), 2);
结束
SDL = 0 (1,7219);
sdl (v) =一个;
Res = 0 (5,7219);
res(:, v) = B;