Converting location of a 2x3 vector into a matrix with value 1

2 views (last 30 days)
Suppose I have
a = 2×3
1 3
2 4
7 8
Now I want to create a matrix of dimension 10 x 10 where the entries 1,3 and 2,4 and 7,8 are equal to one.
Z = zeros(10) % 10 x 10 matrix containing only zeros
Z(a(1,1),a(1,2))=1 % now entry 1,3 is equal to 1
This is an illustrative example and I could for sure just code the second line three times. However for a large matrix a this will be tedious. I have tried to solve this problem with some for loops but without any positve result.
  3 Comments
Wietze Zijpp
Wietze Zijpp on 23 Mar 2022
Thank you for your response. It is more than the output I expect. I would like to only obtain the output
Z(a(1,1),a(1,2))=1; % so entry 1.3 =1
Z(a(2,1),a(2,2))=1; % entry 2,4 = 1
Z(a(3,1),a(3,2))=1; % entry 7,8 = 1
Arif Hoq
Arif Hoq on 23 Mar 2022
or this one ?
a = [1 3;2 4;7 8];
Z = zeros(10) ;% 10 x 10 matrix containing only zeros
Z(a(1,1),a(1,2))=1; % now entry 1,3 is equal to 1
Z(a(2,1),a(2,2))=1;
Z(a(3,1),a(3,2))=1
Z = 10×10
0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Sign in to comment.

Accepted Answer

Voss
Voss on 23 Mar 2022
Edited: Voss on 23 Mar 2022
a = [1 3
2 4
7 8];
Z = zeros(10,10);
Z(sub2ind(size(Z),a(:,1),a(:,2))) = 1
Z = 10×10
0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

More Answers (3)

Arif Hoq
Arif Hoq on 23 Mar 2022
Edited: Arif Hoq on 23 Mar 2022
if 2nd one is your expecter output , then
a = [1 3;2 4;7 8];
Z = zeros(10) ;% 10 x 10 matrix containing only zeros
row=size(a,1);
j=1:2;
for i=1:row
Z(a(i,j(1)),a(i,j(2)))=1;
end

Stephen23
Stephen23 on 23 Mar 2022
Edited: Stephen23 on 23 Mar 2022
"However for a large matrix a this will be tedious."
If you have a large matrix it may be better if it were a sparse array (which can make operations using it more efficient), in which case this task is very easy:
a = [1,3;2,4;7,8];
m = sparse(a(:,1),a(:,2),1,10,10)
m =
(1,3) 1 (2,4) 1 (7,8) 1
full(m) % checking
ans = 10×10
0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Bruno Luong
Bruno Luong on 23 Mar 2022
Edited: Bruno Luong on 23 Mar 2022
a = [1,3;2,4;7,8]; % assumed there is no repeated indexes
A = accumarray(a,1,[10,10])
A = 10×10
0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Categories

Find more on Matrices and Arrays in Help Center and File Exchange

Tags

Products

Community Treasure Hunt

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

Start Hunting!