[英]Access global variable in calling a function in parfor in matlab
我想知道如何在parfor循環中調用函數時輕松訪問全局變量? 例如,示例代碼如下,
global a
a = 132.1;
A = [0, 0, 0];
for i=1:3
A(i) = test(i);
end
測試功能是
function f = test(v)
global a
f = a+v;
代碼在這種格式下應該是正確的,但是,如果我更改為parfor,則會出現問題。 我認為主要問題是全局變量a。 那么如何修改代碼? 盡管在此示例中,修改很容易並且不需要parfor,但是我的實際代碼確實很復雜,問題卻落在了同一個代碼上。
問題在於parfor和全局變量:
有兩個限制。
You cannot place a GLOBAL declaration directly inside a PARFOR loop The MATLAB workers executing the body of your PARFOR loop are separate MATLAB processes, and the values of global variables are not synchronised
因此,盡管您可以在從PARFOR循環的主體調用的函數中使用GLOBAL變量,但它們可能無法按您期望的方式運行。
因此,在我看來,您可以將a
變量傳遞給循環,並避免使用全局變量,這對於函數式編程和一般編程而言是一個很好的規則。 也有其他類似的解決方案:
http://www.mathworks.com/matlabcentral/fileexchange/31972-worker-object-wrapper
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.