Creating a matrix from data in a vector
Ältere Kommentare anzeigen
I have two vectors that contain positive integer values but are not consecutive. I would like to create a matrix that uses these values to place a 1 in a location. Example: I have a vector member_i = [1;1;2] and another vector member_j = [2;3;3]. I would like to create a matrix that is 2 times the number of rows of the vector and use that as the number of columns. I would also like to have the number of rows in the matrix equal 4 times the number of rows in the vectors. These vectors could be any length. I would also like to use the data from the vectors to put 1's in various locations, say for instance if member_i value is 1, the first row would have a 1 in row 1 column 1 and another 1 in row 2 column 2. Then if member_j value is 3, I would like row 3 column 5 to have a 1 and row 4 column 6 to have a 1. For the given vectors mentioned above the desired output would be:
DESIREDOUTPUT =
1 0 0 0 0 0
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 1 0 0
1 0 0 0 0 0
0 1 0 0 0 0
0 0 0 0 1 0
0 0 0 0 0 1
0 0 1 0 0 0
0 0 0 1 0 0
0 0 0 0 1 0
0 0 0 0 0 1
my current code:
Beta = zeros(4,2*member_count);
for idx5 = 1:member_count;
Beta(idx1,2*member_i(idx5,1)-1) = 1;
Beta(idx2,2*member_i(idx5,1)) = 1;
Beta(idx3,2*member_j(idx5,1)-1) = 1;
Beta(idx4,2*member_j(idx5,1)) = 1;
end
Beta =
1 0 1 0 0 0
0 1 0 1 0 0
0 0 1 0 1 0
0 0 0 1 0 1
1 0 1 0 0 0
0 1 0 1 0 0
0 0 1 0 1 0
0 0 0 1 0 1
1 0 1 0 0 0
0 1 0 1 0 0
0 0 1 0 1 0
0 0 0 1 0 1
Thanks for any help to this matlab noobie. Cedric Wannaz http://www.mathworks.com/matlabcentral/answers/contributors/1078046-cedric-wannaz was more than helpful to me before.
6 Kommentare
Matt J
am 11 Mär. 2013
I, for one, do not understand the rule by which member_i and member_j are used to fill the matrix with ones. Your example also doesn't match up with your explanation. You said there should be a 1 in row 3, column 5, but there is not.
Mark
am 11 Mär. 2013
Mark
am 11 Mär. 2013
You're going to need to be even clearer, I suspect...
member_i in your example consists of 3 numbers [1,1,2]. By what rule do I get from these 3 numbers to the row numbers 1 & 2, 5 & 6, 9 & 10? Moreover, once I have the row coordinates of the 1s, how do I then get the column coordinates?
Mark
am 11 Mär. 2013
The picture does clarify things, and see my answer below. According to your rules, however, the number of columns will not be 2*length(member_i) as you originally posted. The number of columns would have to be (at least)
2*max([member_i;member_j])
Akzeptierte Antwort
Weitere Antworten (0)
Kategorien
Mehr zu MATLAB finden Sie in Hilfe-Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!