在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)中的每个值生成二进制值并将其存储在矩阵中,但这似乎效率很低。
答案 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);