八度 - 创建所有二进制值的矩阵

时间:2017-04-01 10:04:14

标签: matlab matrix octave

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

  

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

     

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

     

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

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

3 个答案:

答案 0 :(得分:2)

de2bi可能位于八度通讯工具箱中,但我没有安装。以下是十进制到二进制的单行实现,可能已经足够了

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

答案 1 :(得分:2)

这是另一种方式:

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

答案 2 :(得分:1)

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

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