【问题标题】:Matlab vector to its binary representationMatlab向量到它的二进制表示
【发布时间】:2014-09-25 16:17:47
【问题描述】:

我有一个像 A 的向量:1 3 7 8 我想构造一个二进制向量,例如 B (1 2 3 4 5 6 7 8) (1 0 1 0 0 0 1 1)

【问题讨论】:

    标签: matlab vector binary


    【解决方案1】:

    您可以只使用索引:

    B = zeros(1, max(A));
    B(A) = 1;
    

    或者使用sparse:

    B = full(sparse(1, A, 1));
    

    这些方法不需要算术运算,因此可能比以前的答案更快。

    【讨论】:

    • +1 - 这对我来说是最优雅的解决方案......也是我自己想出的解决方案
    【解决方案2】:

    怎么样:

    binA = sum( de2bi(2.^(A-1)) , 1 ) 
    
    binA =
    
         1     0     1     0     0     0     1     1
    

    【讨论】:

    • +1。如果您没有通讯工具箱(包括de2bi):使用sum( dec2bin(2.^(A-1))-'0' , 1 )
    • 我现在前面有八度音阶,当你在向量A 中有零时它不起作用,它在 MATLAB 中有效吗?
    • @vsoftco A 中的 0 值在 Matlab 中不起作用......而且它也没有意义,是吗? Matlab 索引开始于1
    • @LuisMendo,这就是我问的原因,我感觉 OP 想要将二进制数转换为 MATLAB 中表示为向量的十进制数,所以原则上你会在里面有 0 ,不是吗?
    • @vsoftco 从 OP 示例来看,其目的似乎是:将A 指示的位设置为 1,其余为 0
    【解决方案3】:

    可以先将向量转换为整数(以10为底),

    d = sum(A(:).*(10.^[numel(A)-1: -1: 0])(:)) 
    

    然后使用

    d 转换为二进制
    b = de2bi(d)
    

    然后,您可以从b 中提取任意数量的位

    【讨论】:

    • 可能是最后的(:)。您不能像在 Octave 中那样在 Matlab 中链接索引
    • 另外,MATLAB 的方法是 dec2bin,而 Octave 的方法是 de2bide2bi 如果您有通讯工具箱(如 Luis Mendo),则可以使用。
    • @rayryeng,不,MATLAB 两者都有,dec2bin 是标准的,de2bi 来自 Communication System Toolbox
    • @vsoftco - 在你发布你的信息之前我更正了自己:)
    猜你喜欢
    • 2011-10-21
    • 2012-01-24
    • 2011-07-30
    • 2013-09-08
    • 1970-01-01
    • 2017-06-26
    • 2011-02-02
    • 2017-02-11
    • 2010-11-17
    相关资源
    最近更新 更多