2017-02-10 124 views
1

我想對矩陣的每個元素應用一個函數。我用for循環做。但是由於速度對我來說非常重要,我想知道是否有人能幫我通過去除循環讓速度更快?如何在MATLAB中將函數應用於矩陣?

這裏是我的代碼:

Nrow=size(W,1); 
Ncol=size(W,2); 

for R=1:Nrow 
    for C=1:Ncol 
     W(R,C)=(sign(W(R,C))) * (max((abs(W(R,C))- lambda),0)); 
    end 
end 
+0

我強烈建議你閱讀,我們在文件#1的[矢量](http://stackoverflow.com/documentation/matlab/750/vectorization#t=201702101445209097363)的話題。 – codeaviator

回答

5

所有你實際上已經將顯示操作的已經操作(逐元素)與外基質是*是矩陣乘法,你會想要.*而不是執行element-wise multiplication

W = sign(W) .* max(abs(W) - lambda, 0); 
+2

@Brick不,它是「W」和「0」中每個值之間的元素最大值。要獲得最大行數或列數,將會要求'max(data,[],dim)' – Suever