2

var()int32入力の値の分散を返す は、引数として受け入れません。

data = [0,2,9,2,5,8,7,3,1,9,4,3,5,8,10,0,1,2,9,5,10];

>> var(double(data))
ans =
   11.8905

>> var(int32(data))
Error using var (line 59)
First argument must be single or double.

のコードで型チェックを削除すると、次のvarようになります。

>> var(int32(data))
ans =
   11.9000

これは、MATLAB では、整数と浮動小数点の間の減算の結果が整数であるため、精度が失われるためです (たとえば int32(2) - 2.1 == 0、-0.1 ではなく)。

var()では、エラー メッセージをスローする代わりに、整数入力を double にキャストしないのはなぜでしょうか?

scatterhist()とは、入力としてfeedforwardnet()受け入れられない関数の他の 2 つの例です。int32とりわけ、これはプログラミング言語の相互運用性にとって厄介です。他の言語の整数は MATLAB で int32 に変換される可能性があるためです。また、意味的にはint32、入力として持つことは意味があり、時には持つことよりもさらに意味がありますdouble(たとえばfeedforwardnet()、入力が隠れニューロンの数を指定し、自然数を持つことが期待される場合)。

4

1 に答える 1

2

除算などを含む関数は、使用するデータ型と、後続の操作で発生する可能性のある潜在的な暗黙の丸めについての認識intを高めるために s を受け入れないと思います。

RAM に保存するために を使用しているとします。これには除算が含まれるため、使用するにはint32データを明示的にキャストする必要があります。doublevar()

data = int32([0,2,9,2,5,8,7,3,1,9,4,3,5,8,10,0,1,2,9,5,10]);
data - var(data)

エラーは、データ型と、二重分散とデータの間で発生する潜在的な暗黙の丸めを思い出させます。

于 2013-05-23T23:51:36.830 に答える