Converting integer values to logical array

I have a vector (160,1) in size which include integer number from 1 to 4, I want to convert in logical array by replacing 1 to(1 0 0 0), 2 to (0 1 0 0), and so on; for classifiction propblem.

 采纳的回答

Try this:
m = randi([1, 4], 160, 1)
% Get 3 bit array
characterArray = dec2bin(m)
% Tack on column of 0's to the left edge
characterArray = [repmat('0', 160, 1), characterArray]
logicalArray = logical(characterArray - '0')

5 个评论

I created a "a vector (160,1) in size which include integer number from 1 to 4" just like you said. Apparently you're starting with something else. Please give your code where you create that column vector.
it works perfectly now, i just create differnt size vector to test it, and I forgot to change it in the code.
thanks
To be more robust for different sized vectors, use size() or length() when you call repmat():
m = randi([1, 4], 160, 1)
% Get 3 bit array
characterArray = dec2bin(m)
% Tack on column of 0's to the left edge
characterArray = [repmat('0', length(m), 1), characterArray]
logicalArray = logical(characterArray - '0')
thank you, it's really help
Thanks for sharing,
This solution gave an error, so I modified it slighly, just in case someone is having any problem.
% Generate random values
m = randi([1, 4], 160, 1)
% Get 4 bit array
characterArray = dec2bin(m,4)
% convert to logical array
logicalArray = logical(characterArray - '0')

请先登录,再进行评论。

更多回答(3 个)

You can use implicit expansion.
>> r = randi(4, 10, 1); % Your values will vary
>> values = r == 1:4;
>> t = table(r, values)
t =
10×2 table
r values
_ __________________________
1 true false false false
2 false true false false
3 false false true false
4 false false false true
4 false false false true
1 true false false false
4 false false false true
4 false false false true
2 false true false false
4 false false false true
Anthony Bartoletti
Anthony Bartoletti 2019-10-14
编辑:Anthony Bartoletti 2019-10-14
I'm not sure this is the answer requested. The solution given turns
1 into ( 1 0 0 0 ), 2 into ( 0 1 0 0 ), 3 into ( 1 1 0 0 ), 4 into ( 0 0 1 0 ).
But for a classification problem, you want to turn
1 into ( 1 0 0 0 ), 2 into ( 0 1 0 0 ), 3 into ( 0 0 1 0 ), 4 into ( 0 0 0 1 ).
I managed a solution: Create a logical 4x4 identity matrix with I = logical(eye(4)). Then given a sequence (row) r of integers 1 <= n <= 4, conduct
M = I( :, r)
This will select from the 4 logical basis vectors as columns, according to the sequence r.
I've combined the two approaches above and came up with this rather elegant solution:
% Example input
y = [1 3 4 5 7 9 8 2 1 5 10 3 4 6 8 2 6 1 2 7 10];
num_labels = max(y)
% Convert y into y_matrix
logic_template = eye(num_labels);
y_matrix = logic_template(:, y);
You can use boolean(eye(num_labels)) instead of eye(num_labels) if you want the result to be in the logical datatype.

类别

帮助中心File Exchange 中查找有关 Data Type Conversion 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by