簡體   English   中英

MATLAB parfor切片3D數組

[英]MATLAB parfor slicing a 3D array

我正在嘗試使用parfor加快我的代碼。 該代碼的目的是在3D圖像上滑動3D正方形窗口,並對每個mxmxm塊應用一個函數。

我寫了這段代碼:

function [ o_image ] = SlidingWindow( i_image, i_padSize, i_fun, i_options )
%SLIDINGWINDOW Summary of this function goes here
%   Detailed explanation goes here

o_image = zeros(size(i_image,1),size(i_image,2),size(i_image,3));
i_image = padarray(i_image,i_padSize,'symmetric');
i_padSize = num2cell(i_padSize);
[m,n,p] = deal(i_padSize{:});
[row,col,depth] = size(i_image);
windowShape = i_options.windowShape;
mask = i_options.mask;
parfor (i = m+1:row-m,i_options.cores)
    temp = i_image(i-m:i+m,:,:);
    for j = n+1:col-n
        for h = p+1:depth-p
            ii = i-m;
            jj = j-n;
            hh = h-p;
            temp = temp(:,j-n:j+n, h-p:h+p);
            o_image(ii,jj,hh) = parfeval(i_fun, temp, windowShape, mask);
        end
    end
end

end

我收到一個警告和一個我不知道如何解決的錯誤。 警告說:

整個數組或結構'i_image'是一個廣播變量。

錯誤提示:

PARFOR循環由於使用變量“ o_image”的方式而無法運行。

我不明白如何解決這兩件事。 任何幫助是極大的贊賞!

據我了解, parfeval負責在可用的worker數上運行您的函數,這就是為什么它不需要被parfor包圍的原因。 假設你已經有一個活躍的parpool改變外部parforfor消除這兩個問題

不幸的是,由於您的輸入未知,我無法以基准測試來支持我的答案,也無法提出更合適的解決方案。

在我看來,可以通過其他方式來優化代碼,主要是通過 我建議您研究以下資源:

PS: (i = m+1:row-m, i_options.cores)的第二部分似乎i_options.cores) ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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