在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