2 つの構造体オブジェクト間のペアごとの距離を計算しようとしています。この距離は対称です。配列には約 N = 8000 のオブジェクトがあります。
したがって、N * (N+1)/2 の距離のみを計算する必要があります。各計算は独立しているため、この計算をどのように並列化できますか?
ここで、オブジェクトは配列 X に格納されており、サイズ N*(N+1)/2 の配列 A に距離を格納したいと考えています。BDHMM() は、2 つのオブジェクト間の距離を返す関数です。
次の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.
助けてください。