1

版本:Matlab 2009a

我正在使用 randsrc() 函数生成大小为 <1x116286> 的向量。由于我再次将其添加到相同大小但为 uint8 类型的矩阵中,因此我正在执行以下操作 -

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

现在,Matlab 更改了返回的元素向量 - [240,63,0] 而不是 [-1,1],大小为 <1x930288 uint8>。这是预期的,因为 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 回答