7

我想计算矩阵元素的标准推导。所以我首先用命令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
4

1 回答 1

6

很可能您的 B 向量是某种 int 类型。尝试这样调用

std(double(B))

上面的语句首先转换B为double类型,然后调用std。

whos要检查,命令提示符下的变量类型是什么类型。

于 2012-10-04T16:26:41.363 回答