Quería calcular la derivación estándar de los elementos de una matriz. Así que primero transformé mi matriz con el comando reshape
en un vector, y luego usé std
.El estándar de Matlab funciona en REPL pero no en el programa
Sin embargo, recibí un mensaje de error:
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);
Así imprimí mi vectorial B
, justo antes de pasarla a std
. Lo asigné a una variable x
en REPL intenté llamar al std(x)
manualmente.
Curiosamente, esto funciona bien.
Entonces, ¿cómo puede llamarse a la función std
– con los mismos argumentos – un error cuando se utiliza dentro de mi código, pero funciona bien en REPL?
Aquí es la función de 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
Este es el vector B
, justo antes de que el mensaje de error:
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
¡Muchas gracias! Ahora funciona. Pero todavía no entiendo por qué. ¿Te importaría explicar esto? – milli
Simple: está esperando dobles como entrada. –