1

バージョン:Matlab 2009a

randsrc()関数を使用して、サイズ<1x116286>のベクトルを生成しています。同じサイズでuint8タイプのマトリックスに再度追加しているので、次のようにしています-

l=typecast(randsrc(1,v(2)),'uint8');

ここで、Matlabは、返される要素のベクトルを[-1,1]ではなく[240,63,0]に変更し、サイズは<1x930288uint8>になりました。これはdoubleとuint8のサイズが異なるために予想されますが、型キャスト後に同じサイズと値のベクトルが必要です。

PS:サイズ<1x116286>のマトリックス上のすべての値から「1」を減算または加算したいと思います。これを行う他のきちんとした方法はありますか?

4

2 に答える 2

5

私は問題を理解しているので、上記にはいくつかの問題があります。

  • uint8は符号なしタイプであるため、負のオフセットをサポートしません。
  • 「typecast」関数は、既存のデータを変換するのではなく、再解釈するために使用されます。ここでは、randsrc(...)の浮動小数点出力の各バイトを整数として解釈しています。

残念ながら、Matlabをテストするのに便利なものはありませんが、以下はあなたが求めているものに近いものを提供するはずです。

l = int8( randsrc(1,v(2)) );
于 2012-10-08T14:21:38.180 に答える
0

ベクトル(-1,1 ...)を形成してそれをベクトル'z'に追加する代わりに、私はこのようなことをしました。

l =randsrc(1,v(2));
z(l==-1)=z(l==-1)-1;
z(l==1)=z(l==1)+1;

だから、私は今、タイプを変更する必要はありません。

于 2012-10-08T14:50:31.983 に答える