我正在尝试计算两个struct对象之间的成对距离。该距离是对称的。我有大约N = 8000,数组中有这样的对象。
所以我只需要计算N *(N + 1)/ 2距离。如何并行化这个计算,因为每个计算都是独立的?
这里我的对象存储在数组X中,我想在数组A中存储大小为N *(N + 1)/ 2的距离。 BDHMM()是一个返回两个对象之间距离的函数。
我尝试过以下Matlab代码。
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
我收到以下错误:
Error: The variable A in a parfor cannot be classified.
请帮忙。
答案 0 :(得分:1)
你不能刺杀你用parfor计算的索引,Matlab需要预先知道矩阵的哪些部分将通过迭代刺杀。如果你考虑一下,这是有道理的。
这应该解决它:
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{:})