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 に答える