2012-10-04 38 views
7

我想計算矩陣元素的標準推導。所以我首先用命令reshape將我的矩陣轉換爲一個向量,然後使用stdMatlab的std在REPL中工作,但不在程序中

但是,我得到了一個錯誤信息:

Error using var (line 59) 
First argument must be single or double. 

Error in std (line 32) 
y = sqrt(var(varargin{:})); 

Error in reducenoise2>standabw (line 112) 
      s = std(B); 

Error in reducenoise2 (line 36) 
D = standabw(n,m,r,fu,D); 

所以我印我的矢量B,只是將它傳遞給std之前。我將它分配給REPL中的變量x,嘗試手動撥打std(x)

有趣的是,這工作得很好。

那麼如何調用函數std –與相同的參數–導致在我的代碼中使用錯誤,但在REPL中正常工作?

這裏是Matlab的功能:

function [D] = standabw(n,m,r,fu,D) 
    for i = 1+r:n-r 
     for j = 1+r:m-r 
      C = D(i-r:i+r,j-r:j+r); 
      B = reshape(C,(2*r+1)^2,1) 
      s = std(B); 
      if s > fu 
       D(i,j) = 255; 
      end 
     end 
    end 
end 

這是矢量B,只是在錯誤消息之前:

B = 

    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    0 
    1 
    0 
    0 
    0 
    0 
    0 
    0 
    0 

回答

6

最有可能您的B載體一些整型它。嘗試把這種方式

std(double(B)) 

上面的語句第一蒙上B爲double型,然後調用性病。

要檢查,命令提示符下的變量類型whos是什麼類型。

+0

非常感謝!現在它可以工作。但我仍然不明白爲什麼。你介意解釋一下嗎? – milli

+0

簡單:它期待雙打作爲輸入。 –

相關問題