Chciałem obliczyć standardowe wyprowadzenie elementów macierzy. Więc najpierw przekształciłem swoją macierz za pomocą polecenia reshape
na wektor, a następnie użyłem std
.Std Matlaba działa w REPL, ale nie w programie
Jednak mam komunikat o błędzie:
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);
Więc drukowane mój wektor B
, tuż przed przekazaniem go do std
. Przypisałem go do zmiennej x
w REPL, próbowałem ręcznie wywołać std(x)
.
Co ciekawe, działa to dobrze.
W jaki sposób funkcja std
– wywoływana z tymi samymi argumentami powoduje, że w moim kodzie jest błąd, ale działa poprawnie w REPL?
Oto funkcja 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
Jest to wektor B
, tuż przed komunikatem o błędzie:
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
Wielkie dzięki! Teraz działa. Ale nadal nie rozumiem, dlaczego. Czy mógłbyś wytłumaczyć to? – milli
Prosty: oczekuje się, że wejście podwójne. –