【问题标题】:Type casting a vector in Matlab在 Matlab 中输入一个向量
【发布时间】:2012-09-28 19:23:47
【问题描述】:

版本:Matlab 2009a

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

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

现在,Matlab 更改了返回的元素向量 - [240,63,0] 而不是 [-1,1],大小为 。这是预期的,因为 double 和 uint8 具有不同的大小,但我想要一个在类型转换后具有相同大小和值的向量。

PS:我想从大小为 的矩阵上的所有值中减去或添加“1”。有没有其他巧妙的方法可以做到这一点?

【问题讨论】:

    标签: matlab casting


    【解决方案1】:

    据我了解,上述问题存在几个问题:

    • uint8 是无符号类型,因此不支持负偏移量;
    • “typecast”函数用于重新解释现有数据,而不是对其进行转换:这里您将 randsrc(...) 的浮点输出的每个字节解释为整数。

    不幸的是,我没有方便的 Matlab 进行测试,但以下内容应该更接近您所追求的:

    l = int8( randsrc(1,v(2)) );
    

    【讨论】:

    • +1 这是正确的。也许最好将另一个向量转换为 double ,但这取决于 OP 以后想要做什么。
    【解决方案2】:

    好吧,我没有形成一个向量 (-1,1...) 并将其添加到某个向量 'z' ,而是做了这样的事情。

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

    所以,我现在不需要更改类型。

    【讨论】:

    • "z(l==1)=z(l==1)+1" 肯定等价于 "z(l==1) = 2" ?
    • 不,我的代码做了什么,它选择了 Z 的所有元素,其中 l 向量的对应元素为 1。所以它将增加 z 的一些选定元素
    猜你喜欢
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多