MATLAB Answers

# 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일
Read about sub2ind
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!