【问题标题】:How to concat results of parfor loop如何连接 parfor 循环的结果
【发布时间】:2015-07-10 12:17:10
【问题描述】:

我正在运行 parfor 循环,它在每次迭代时返回具有不同维度的矩阵,我需要将这些矩阵连接起来以获得最终结果

例如

T = [1 2 3 0
  7 8 9 10]

我为每一行计算应该返回的最大块

第一行

 [1 2
1 3] 

对于第二行

[7 8 9 
 7 9 10]

我的代码是

parfor i = 1:size(T,1)
   findMBL(Data,T(i,:));
end

其中 findMBL 是返回块的函数。 我的问题是如何将迭代结果连接到一个矩阵中

结果应该是

[1 2 0
1 3 0
7 8 9
7 9 10]

注意:第 1 行和第 2 行中的零是填充

【问题讨论】:

  • 一般来说,在使用并行工具箱时,您无需担心任何事情。如果有什么需要担心的,一般 Matlab 会发出警告。

标签: matlab matrix parallel-processing parfor


【解决方案1】:

如果您知道结果的最大大小,就很容易做到。

% I am completely guessing this, substitute for realistic maximum possible size
res=zeros(2*size(T,1),size(T,2)); 


parfor i = 1:size(T,1)
   auxres=findMBL(Data,T(i,:));
   res([i*2-1,i*2],1:size(auxres,2))=auxres;
end

【讨论】:

  • 感谢 Ander 先生的帮助,但它给了我错误:PARFOR 循环由于变量“res”的使用方式而无法运行
  • 哎哟!我现在没有matlab,所以我不能尝试!但是,按照 Ratbert 的建议去做。将 res 定义为 cell(size(T,1),1) and do res{ii}=find...`
【解决方案2】:

你必须定义一个缓冲单元,你将在每次迭代中放置你的数组,然后使用cell2mat 来获得连接的结果。

【讨论】:

  • 谢谢@Ratbert 先生,但你能告诉我怎么做吗?我是 matlab 和并行计算的新手
猜你喜欢
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 2019-12-24
相关资源
最近更新 更多