Я хотел бы использовать parfor
для вложенного цикла, я привел пример, показывающий свою структуру:классификация-ошибка решена путем изменения индекса, почему?
temp_vars = 1:10;
global_arr = zeros(10,10);
parfor i=0:9
for j=0:9
constant_var = temp_vars(i+1);
global_arr(i+1, j+1) = i*j*constant_var;
end
end
MATLAB дает мне ошибку: Error: The variable global_arr in a parfor cannot be classified.
.
Однако, если изменить значение i
и j
к 1..10
вместо 0..9
, то магическим образом работает хорошо. Почему это?
Say моя переменная 'temp_vars' гораздо больше, и мне нужно использовать более сложные indicices, которые не могут быть решены просто переходя от «0..9' к« 1..10 », например 'constant_var = temp_vars (10 + 100 * j + 200 * i);'. Означает ли это, что я не могу использовать 'parfor'? – BillyJean
Вы можете использовать его, но создайте список индексов, которые должны быть заданы 'temp_vars' как функция' i' и 'j' перед циклом, а затем сделайте абсолютную ссылку на них. Что-то вроде 'temp_vars_ind (i, j) = 10 + 100 * j + 200 * i' вне цикла, а затем' temp_vars (temp_vars_ind (i, j)) 'в цикле. – EBH
Будет ли это решение ОК или альтернативно сделать автономную функцию 'ind = @ (i, j) 10 + 100 * j + 200 * i', а затем вызвать' temp_vars (ind (i, j)) '? – BillyJean