簡體   English   中英

在Matlab中的parfor中調用函數時訪問全局變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM