Convert Integer Array to Binary Array
显示 更早的评论
Hello, people.
I want to convert an Integer array to a Binary array but i don't know how to do this. I've read about the function "dec2bin" but it doesn't do what i exactly want (i think...). For example (sorry my bad artistic skills):

So, thank you!
2 个评论
Image Analyst
2015-7-15
编辑:Image Analyst
2015-7-15
Seems weird to me that all numbers don't have the same number of characters. So the binary number tells you nothing about what created it. For example 1011 could come from both 23 and from 51. What good is that? Why do you want to do this?
Igor Felipe Gallon
2015-7-16
采纳的回答
更多回答(2 个)
dpb
2015-7-15
Using builtins w/o mod/rem to separate digits...
>> dec2bin(str2num(sprintf('%d',x).'))
ans =
011
010
001
111
110
010
101
>>
4 个评论
Image Analyst
2015-7-15
It looks like Igor's chopping off any zeros on the left (for some reason) before he builds the long string.
dpb
2015-7-15
I just presumed he simply output the necessary number of digits from the conversion to show the result but perhaps he does want to string them together for some reason. He can build the final string as desired from the individual components as given above so left that as "exercise for the student" :)
Igor Felipe Gallon
2015-7-16
Walter Roberson
2015-7-16
For GA work you will very likely want fixed-length segments. With the scheme you are proposing, after you do the crossover, you do not know how to deconstruct it into integers again, other than the fact that you know that in this scheme no integer will start with a binary 0.
Walter Roberson
2015-7-16
V = 3217625;
d = sprintf('%d', V) - '0';
b = dec2bin(d) .' - '0';
one_seen = cumsum(b,1) > 0;
bits = b(one_seen) .';
2 个评论
Andrei Bobrov
2015-7-16
nBit = sum(one_seen);
Walter Roberson
2015-7-16
You are relying upon accidents of your encoding scheme. If you were to renumber the entries in an array then you would change which mutated states are possible. For example if you were to initialize 20 different array indices all to 1, then those would encode as 1 bit each, and your mutation cannot create entries that represent 2 or higher because additional bits would be required to store those indices.
If your swapping can swap in the "middle" of a symbol then you could end up swapping a 0 from the end of 1 symbol to become the beginning of another symbol, but then you would not be able to decode that. For example, 10|1 with the 2nd and 3rd bits swapped would be 11|0 but 0 is not a valid encoding for any number in your scheme.
If your swapping is restricted to symbol boundaries then you have not gained anything other than complexity of representation compared to using a fixed number of bits to represent the indices.
类别
在 帮助中心 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
