Ich wollte die Standardableitung der Elemente einer Matrix berechnen. Also habe ich zuerst meine Matrix mit dem Befehl reshape
in einen Vektor umgewandelt und dann std
verwendet.Matlab's std arbeitet in REPL aber nicht im Programm
Allerdings habe ich eine Fehlermeldung:
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);
So druckte ich meinen Vektor B
, kurz bevor es zu std
vorbei. Ich habe es einer Variablen zugewiesen x
in REPL versuchte std(x)
manuell aufrufen.
Interessanterweise funktioniert das gut.
Also wie kann die Funktion std
– aufgerufen mit den gleichen Argumenten – führen zu einem Fehler bei der Verwendung in meinem Code, aber funktioniert gut in REPL?
Hier ist die Matlab-Funktion:
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
Dies ist der Vektor B
, kurz vor der Fehlermeldung:
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
Vielen Dank! Jetzt funktioniert es. Aber ich verstehe immer noch nicht warum. Würde es dir etwas ausmachen, das zu erklären? – milli
Einfach: Es erwartet Doppelgänger als Eingabe. –