在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)中的每个值生成二进制值并将其存储在矩阵中,但这看起来非常低效。
在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)中的每个值生成二进制值并将其存储在矩阵中,但这看起来非常低效。
de2bi
可能在八度音程通讯工具箱,但我没有这样的安装。以下是一个网上实现十进制的二进制可能不够好
nums = (1:7)';
bsxfun(@(u,v)bitand(u,v)~=0, [16 8 4 2 1], nums)
我不知道八度,但在MATLAB你有de2bi
:
n = 5;
nums = 0:2^n-1;
b = de2bi(nums);
这里的另一种方式:
N = 5;
result = mod(floor(bsxfun(@rdivide, (0:2^N-1).', 2.^(N-1:-1:0))), 2);
感谢您的帮助。它给了我要查找的东西! – Tarun
Octave在通信软件包中有'de2bi',但是对于Octave和MATLAB,您都必须使用'de2bi(nums,5,'left-msb')'来重现OP的示例输出。您还可以通过将字符串输出转换为类似'dec2bin(nums,5) - '0''的数字来使用'dec2bin'而无需额外的软件包或工具箱。 – beaker