2017-04-01 86 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);