首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用parfor并行嵌套循环计算对称距离矩阵

用parfor并行嵌套循环计算对称距离矩阵
EN

Stack Overflow用户
提问于 2013-09-12 12:45:40
回答 1查看 572关注 0票数 1

我试图计算两个结构对象之间的成对距离。这个距离是对称的。我在数组中有大约N= 8000这样的对象。

所以我只需要计算N* (N+1)/2距离。既然每个计算都是独立的,那么我如何并行化这个计算呢?

这里,我的对象存储在数组X中,我希望将这些距离存储在大小为N*(N+1)/2的数组A中。BDHMM()是一个返回两个对象之间距离的函数。

我已经尝试了以下Matlab代码。

代码语言:javascript
复制
N = 8000;
load inithmm.mat
size = N*(N+1)/2;
A = zeros(size,1);

matlabpool open local 4
  parfor i = 1:N-1
    i
    T = [];
    for j = i:N
      if(j == i)
          temp = 0;
      else
          temp = BDHMM(X(i),X(j));
      end
      T = [T; temp];
    end

    beg = size - (N + 1 - i)*(N + 2 - i)/2 + 1;
    l = length(T);
    A(beg:beg+l-1, 1) = T;
  end
matlabpool close

我得到了以下错误:

代码语言:javascript
复制
Error: The variable A in a parfor cannot be classified.

请帮帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-12 15:11:20

你不能刺杀你计算的索引使用parfor,Matlab需要事先知道哪些部分的矩阵将通过女巫迭代刺杀。如果你想一想,这是有道理的。

这应该能解决这个问题:

代码语言:javascript
复制
N = 800;
size = N*(N+1)/2;
A = cell(N,1);
matlabpool open local 4
  parfor i = 1:N-1
    i
    T = zeros(N-i+1,1);
    for j = i:N
      if(j == i)
          T(j-i+1) = 0;
      else
          T(j-i+1) = BDHMM(X(i),X(j));
      end
    end

    A{i, 1} = T;
  end

matlabpool close
B=vertcat(A{:})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18764685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档