Generate matrix of bits

痞子三分冷 提交于 2019-12-04 04:33:51

问题


I would like to take an integer n defining the number of bits in my communication code and a vector defining the alphabet I am assigning to bits 0:n-1, and output a matrix/cell array containing the alphabetic notation for each state, i.e.:

function M = mycommarray(3,[-1,1])

produces

M = [{-1,-1,-1}, {-1,-1,1}...]

I tried doing this an easier way with dec2bin(0:7,3), but there doesn't seem to be a quick way to make the zeros into -1s.

Is there anything close to prepackaged that does this? In this case I don't want anyone to make it for me (related to homework).


回答1:


dec2bin is actually not the best way to approach the problem, because its result is an array of strings (i.e a matrix of characters), where each digit is a character. If you want '-1' to represent a logical "0", that would be two characters, and it introduces problems.

Consider an alternative method with bitget. Making use of Shai's suggestion, do the following:

[bits, values] = meshgrid(1:3, 0:7);
M = 2 * bitget(values, bits) - 1;

The will produce what you want:

M =
    -1    -1    -1
     1    -1    -1
    -1     1    -1
     1     1    -1
    -1    -1     1
     1    -1     1
    -1     1     1
     1     1     1



回答2:


To easily convert zeros to -1 (and leave the ones intact) you can simply do

minusOnes = 2 * zeroOnes - 1;



回答3:


You can also do it like this:

M = 2 * (dec2bin(0:7, 3)=='1')-1;

That returns:

M =
    -1    -1    -1
    -1    -1     1
    -1     1    -1
    -1     1     1
     1    -1    -1
     1    -1     1
     1     1    -1
     1     1     1

However, it's slower. I get 0.0012s (dec2bin) against 0.0002s (meshgrid+bitget) for 1024 values and 10 bits.



来源:https://stackoverflow.com/questions/16383415/generate-matrix-of-bits

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!