parfor в Matlab: переменная в parfor не может быть классифицирована - PullRequest
0 голосов
/ 21 января 2019

У меня есть следующий цикл parfor, который я хотел бы выполнить.

Я получаю сообщение об ошибке:

Error: File: Coords_to_distances4.m Line: 32 Column: 9
The variable nr in a parfor cannot be classified.

, которое указывает на последнюю строку внутреннего цикла for.

nr объявлено и инициализировано вне цикла, и я не вижу никакой другой связи между индексацией переменных или такой, о которой говорят все другие решения.

coords = ... %nx2 array of x and y coordinates
n = length(coords); %n can be up to several million
dr = 0.01; %distance resolution for upcoming calculations

nr = [zeros(200000,1)]; %array to hold counts of distances up to maximum of 200000*dr 

parfor i = 1:n
    for j = i+1:n
        dx =  coords(i,1) - coords(j,1); %get separation in x
        dy =  coords(i,2) - coords(j,2); % and in y

        r = sqrt(dx*dx + dy*dy); %calculates Pythagorean distance
        nbin = floor(r/dr + 0.5); %rounds to the nearest integer
        nr(nbin) = nr(nbin) + 1; %uses the distance as an index to the array to incremenet  
    end
end

Что я делаю не так?Можно ли распараллелить это?

1 Ответ

0 голосов
/ 21 января 2019

Я думаю, что ошибка связана с ограничениями parfor В документации "Для правильной классификации переменных вы должны определить диапазон цикла for, вложенного в цикл parfor постоянными числамиили переменные "

...