Tôi muốn tính toán đạo hàm chuẩn của các phần tử của ma trận. Vì vậy, tôi lần đầu tiên chuyển ma trận của tôi bằng lệnh reshape
thành một vectơ, và sau đó sử dụng std
.Hoạt động của MATLAB trong REPL nhưng không có trong chương trình
Tuy nhiên, tôi nhận được một thông báo lỗi:
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);
Vì vậy, tôi in vector của tôi B
, ngay trước khi đi qua nó để std
. Tôi đã gán nó cho một biến số x
trong REPL đã thử gọi số std(x)
theo cách thủ công.
Điều thú vị là điều này chỉ hoạt động tốt.
Vậy làm thế nào chức năng std
– được gọi với cùng một đối số – dẫn đến lỗi khi được sử dụng trong mã của tôi, nhưng hoạt động tốt trong REPL?
Đây là Matlab chức năng:
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
Đây là vector B
, ngay trước khi thông báo lỗi:
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
Cảm ơn rất nhiều! Bây giờ nó hoạt động. Nhưng tôi vẫn không hiểu tại sao. Bạn có thể giải thích điều này không? – milli
Đơn giản: nó hy vọng tăng gấp đôi như đầu vào. –