Creating a matrix from data in a vector

1 view (last 30 days)
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 Comments
Mark
Mark on 11 Mar 2013
I've posted an image on twitter for more clarity. http://t.co/kgEGqjgudC
The 1's are always on the diagonal in their own little two by two matrix as shown in the image [1 0;0 1]. Each little two by two matrix represents the coordinates of member_i or member_j. So if the vector member_i(3,1) = 2 as is the case in this example the 9th and 10th rows would be used along with the 3rd and 4th columns. And if the vector member_j(3,1) = 3 as is the case in this example, the 11th & 12th rows would be used along with the 5th & 6th columns. So the columns are kind of grouped in a sense as well as the pairs of rows. I'm hoping the picture helps to clarify.
Matt J
Matt J on 11 Mar 2013
Edited: Matt J on 11 Mar 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])

Sign in to comment.

Accepted Answer

Matt J
Matt J on 11 Mar 2013
n=length(member_i);
I=1:2*n;
J=I;
J(1:2:end)=member_i(:).';
J(2:2:end)=member_j(:).';
Beta=kron(sparse(I,J,1), eye(2));
  1 Comment
Mark
Mark on 11 Mar 2013
Matt, thank you so much for your help. I will have to study this bit of code for awhile to understand exactly what's happening. I did a full(Beta) to check out what it looks like expanded. Works great.

Sign in to comment.

More Answers (0)

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!