行列の要素の標準的な導関数を計算したかったのです。そのため、最初にコマンドを使用して行列をreshape
ベクトルに変換してから、を使用しstd
ました。
ただし、次のエラーメッセージが表示されます。
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
。手動でx
呼び出してみたREPLの変数に割り当てました。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