How do I create a 2^n by n matrix that the rows of the matrix enumerate all the possibilities for a n digit binary number?
2 ビュー (過去 30 日間)
古いコメントを表示
For example, for n=3, there are 8 rows, and they are 000,100,010,001,110,101,001,111 (may not in this order). Any fast way to realize it using a function, say f(n)?
0 件のコメント
採用された回答
Guillaume
2016 年 2 月 11 日
Use dec2bin to get the string representation. Subtract '0' from the string to convert characters '0' and '1' to numbers 0 and 1:
n = 3;
dec2bin(0:pow2(n)-1) - '0'
2 件のコメント
Guillaume
2016 年 2 月 11 日
編集済み: Guillaume
2016 年 2 月 11 日
In matlab, when you subtract one character from another, you are in effect subtracting the ASCII values of the character. So, obviously ASCII of '0' - ASCII of '0' is 0. Since '1' follows '0' in the ASCII table. ASCII of '1' - ASCII of '0' is 1. In fact, ASCII of any 'digit' - ASCII of '0' is that digit.
dec2bin will always return strings padded to the minimum number of bits to represent the greatest input. Since you need 3 bits to represent the 4 to 7 of the input array, all strings are returned with 3 bits.
You could have specified the number of bits explicitly if you wanted.
その他の回答 (1 件)
Jan
2016 年 2 月 11 日
r = VChooseKRO(uint8(0:1), 3);
2 件のコメント
Guillaume
2016 年 2 月 11 日
You'll have to compile the c code into a mex file. If you don't care for speed (if your n is not huge, speed is not an issue) you may be better off with some of the file exchange submission mentioned by VChooseKRO, or use my solution which has no dependency.
参考
カテゴリ
Help Center および File Exchange で Characters and Strings についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!