# array to matrix transformation with size[ length of array , largest element in array]

2 views (last 30 days)
summyia qamar on 8 Jan 2017
Commented: summyia qamar on 8 Jan 2017
I have an array [1 1 2 3 1 2 1 ] I want to generate a matrix of size [7x3] as length of array is 7 and maximum element is 3. for example the output look like this
A=[1 0 0
1 0 0
0 1 0
0 0 1
1 0 0
0 1 0
1 0 0]
showing that the 1st element of array assigns 1 to the corresponding column in A. for example the 1st element is 1 so row 1 and column 1 gets value 1, the 3rd element is 2 so row 3 column 2 gets value 1 and so on. Is there any way to do so? I tried diag[array] but it gives a 7x7 matrix
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

### Accepted Answer

Stephen23 on 8 Jan 2017
Edited: Stephen23 on 8 Jan 2017
No need to for any ugly loops, just use sub2ind:
>> C = [1,1,2,3,1,2,1];
>> R = 1:numel(C);
>> Z = zeros(R(end),max(C));
>> Z(sub2ind(size(Z),R,C)) = 1
Z =
1 0 0
1 0 0
0 1 0
0 0 1
1 0 0
0 1 0
1 0 0
##### 1 CommentShowHide None
summyia qamar on 8 Jan 2017
thankyou.God bless you

Sign in to comment.

### More Answers (2)

Image Analyst on 8 Jan 2017
Did you try the obvious brute force way:
array = [1 1 2 3 1 2 1 ]
lengthA = length(array)
maxA = max(array)
A = zeros(lengthA, maxA)
for k = 1 : lengthA
A(k, array(k)) = 1;
end
A % Report to the command window
##### 1 CommentShowHide None
summyia qamar on 8 Jan 2017
thankyou for your help

Sign in to comment.

Steven Lord on 8 Jan 2017
If you want this to be a full array, use accumarray. If the number of rows and/or columns is expected to be large consider using sparse.
% Full
cols = [1 1 2 3 1 2 1 ];
cols = cols(:);
rows = (1:length(cols)).';
A = accumarray([rows, cols], 1)
% Sparse
cols = [1 1 2 3 1 2 1 ];
S = sparse(1:length(cols), cols, 1)
isequal(A, full(S))
##### 1 CommentShowHide None
summyia qamar on 8 Jan 2017
thankyou for you concern

Sign in to comment.

### Community Treasure Hunt

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

Start Hunting!