Change the value of a matrix according to the indexes stored in another one.

조회 수: 1(최근 30일)
Alejandro Fernández 2020년 6월 2일
댓글: Chris Angeloni 2020년 6월 2일
Hey, goodies, let's pretend I have the next matrix.
Z = zeros(5,6);
And in another matrix called idx I have the information of which rows and columns of Z I want to change the value, for example:
idx = [1 1; 2 5; 4 6]
Being the first column the position of the columns I want to change and the value of the second idx column the position of the rows I want to change, and if the value i want to obtein in Z in idx position is 5, what i expect to have is:
This is just an example, in the realization I have many values that I want to change, therefore the option:
Z(1,1) = 5;
Z(2,5) = 5;
Z(4,6) = 5;
Is not an option
I'm looking for something that allows me to do it automatically, without the need for loops, if anyone knows it would help me a lot, thanks.

댓글을 달려면 로그인하십시오.

채택된 답변

KSSV 2020년 6월 2일
편집: KSSV 2020년 6월 2일
Z =zeros(5,6) ;
idx = [1 1; 2 5; 4 6] ;
idx = sub2ind(size(Z),idx(:,1),idx(:,2)) ;
Z(idx) = 5
댓글 수: 1표시숨기기 없음
Alejandro Fernández 2020년 6월 2일
Thank you so much, it works

댓글을 달려면 로그인하십시오.

추가 답변(1개)

Chris Angeloni 2020년 6월 2일
편집: Chris Angeloni 2020년 6월 2일
You probably want to get the index as a linear subscript instead of row,column, then index a vectorized version of your original matrix.
Z = zeros(5,6);
idx = [1 1; 2 5; 4 6];
% save size of Z
sz = size(Z);
% vectorize Z
Z = Z(:);
% make row,col index to linear index
lInd = sub2ind(sz,idx(:,1),idx(:,2))
Z(lInd) = 5;
% resize Z to original size
Z = reshape(Z,sz(1),sz(2));
댓글 수: 2표시숨기기 이전 댓글 수: 1
Chris Angeloni 2020년 6월 2일
Yes, I saw it after! I forgot you can use the linear index to index the original matrix

댓글을 달려면 로그인하십시오.

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by