Converting location of a 2x3 vector into a matrix with value 1
Show older comments
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
a = [1 3;2 4;7 8];
Z = zeros(10) ;% 10 x 10 matrix containing only zeros
Z(a(1,1),a(1,1))=1; % now entry 1,3 is equal to 1
Z(a(1,1),a(1,2))=1;
Z(a(2,1),a(2,1))=1;
Z(a(2,2),a(2,2))=1;
Z(a(3,1),a(3,1))=1;
Z(a(3,2),a(3,2))=1
is that your expected output ?
Wietze Zijpp
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
Accepted Answer
More Answers (3)
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
"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)
full(m) % checking
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])
Categories
Find more on Mathematics 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!