2017-04-01 96 views
1

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

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

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

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

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

回答

2

de2bi可能在八度音程通讯工具箱,但我没有这样的安装。以下是一个网上实现十进制的二进制可能不够好

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

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

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

感谢您的帮助。它给了我要查找的东西! – Tarun

+1

Octave在通信软件包中有'de2bi',但是对于Octave和MATLAB,您都必须使用'de2bi(nums,5,'left-msb')'来重现OP的示例输出。您还可以通过将字符串输出转换为类似'dec2bin(nums,5) - '0''的数字来使用'dec2bin'而无需额外的软件包或工具箱。 – beaker

2

这里的另一种方式:

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