【问题标题】:Octave - Create a matrix of all binary valuesOctave - 创建所有二进制值的矩阵
【发布时间】:2017-04-02 00:40:34
【问题描述】:

在 Octave 中,给定一个数字(例如 5),我需要创建一个 (2^5 X 5) 矩阵,每行具有从 0 到 2^5 - 1 的数字的二进制表示,即矩阵将像

[[ 0, 0, 0, 0, 0],

[ 0, 0, 0, 0, 1]]

[ 0, 0, 0, 1, 0]]

等等。是否有任何内置功能可以做到这一点?无法弄清楚如何有效地做到这一点?我能想到的一种方法是运行一个循环并从 0:(2^5-1) 为每个值生成二进制值并将其存储在矩阵中,但这似乎非常低效。

【问题讨论】:

    标签: matlab matrix octave


    【解决方案1】:

    de2bi 可能在 octave 通信工具箱中,但我没有安装它。下面是十进制转二进制的单行实现,可能就够用了

    nums = (1:7)';
    bsxfun(@(u,v)bitand(u,v)~=0, [16 8 4 2 1], nums)
    

    【讨论】:

      【解决方案2】:

      这是另一种方式:

      N = 5;
      result = mod(floor(bsxfun(@rdivide, (0:2^N-1).', 2.^(N-1:-1:0))), 2);
      

      【讨论】:

        【解决方案3】:

        我不知道八度,但在 matlab 中你有 de2bi:

        n = 5;
        nums = 0:2^n-1;
        b = de2bi(nums);
        

        【讨论】:

        • 感谢您的帮助。它给了我要查找的内容!
        • Octave 在 Communications 包中确实有 de2bi,但对于 Octave 和 MATLAB,您必须使用 de2bi(nums, 5, 'left-msb') 来重现 OP 的示例输出。您还可以通过将字符串输出转换为像dec2bin(nums, 5) - '0' 这样的数字来使用dec2bin,而无需额外的包或工具箱。
        猜你喜欢
        • 1970-01-01
        • 2017-03-27
        • 2021-12-15
        • 2014-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-07
        相关资源
        最近更新 更多