# How to manipulate a matrix under certain conditions to fills gaps with numbers.

조회 수: 1 (최근 30일)
M.S. Khan 2019년 8월 1일
댓글: M.S. Khan 2019년 8월 4일
M is a small matrix. i am working on Big Matrix. My focus is on central (Middle) column. Using mid column, i want to fill (repalce '0' with '3' & '4') according to their positions in the mid colums with to respect to all rows.
M = [0 3 0
0 3 0
3 0 0
0 0 0
0 3 0
3 3 3
0 0 0
0 0 0
0 0 0
0 3 0
3 3 0
0 0 0
3 0 0
0 3 0
0 3 3
0 0 0
0 0 0
0 3 0
0 0 0]
In first occurence of 3 and next occurence of 3 should be filled with 3s. carry on the same mid column, in next occurence from first to next one (6th to 10th rows)should be filled with 4s. Continue by same column, 13 th and 14th rows should be filled as 4 while next occurence of 3 and next 3s gaps( 17th to 19th rows) should be filled with 3
I want to get the 'required colum' where 0's are replaced with bold numbers 3s and 4s with respect to their positions of rows in the mid colum of Matrix M.
Mid column Required
3 3
3 3
0 3
0 3
3 3
3 3
0 4
0 4
0 4
0 4
3 3
3 3
0 4
0 4
3 3
3 3
0 3
0 3
0 3
3 3
0 0
##### 댓글 수: 7이전 댓글 5개 표시이전 댓글 5개 숨기기
M.S. Khan 2019년 8월 1일
Sorry Mr. Guillaume. Due to Lack of experience in use of community plateform.
M.S. Khan 2019년 8월 1일
In my matrix, i need values like required colum.
Mr. Jos and Guillaume, i am trying to replace 0s among first 3 and then next 3 by 3s.
simillarly in next group , the zeros between first 3 and next 3 are replaced by 4.
Thanks for reply and cooperation. warm regards

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

### 채택된 답변

Andrei Bobrov 2019년 8월 1일
편집: Andrei Bobrov 2019년 8월 1일
Let MM - your 'required colum'.
MM =[3,3,0,0,3,3,0,0,0,3,3,0,0,3,3,0,0,3,0]';
m = MM;
m(m == 0) = nan;
%lo - define the indices of the values that need to be changed:
lo = fillmissing(m,'previous') == 3 & fillmissing(m,'next') == 3 & isnan(m);
% ii - assign numbers to intervals:
ii = cumsum([0;diff(lo)>0]).*lo;
%{
p - count the amount of each value of vector ii:
1 element - the number of zeros (0's);
2 element the number of values in the first interval.
3 element the number of values in the second interval, etc.:
%}
p = accumarray(ii(:)+1,1);
% Let a - the values for to be changed (vector with length equal max(ii), in our case - 4):
a = [3,4,4,3]'; % HERE fixed..
% Condition for intervals with length equal 1
a(p == 1) = 3;
% Replacement:
MM(lo) = a(ii(lo));
##### 댓글 수: 12이전 댓글 10개 표시이전 댓글 10개 숨기기
M.S. Khan 2019년 8월 4일
I have this matrix M. i applied following code so many times but i am not getting the result.
M = [3 3 3
3 3 3
0 0 0
0 0 0
3 3 3
3 3 3
0 0 0
0 0 0
0 0 0
3 3 0
0 3 3
0 0 3
3 0 0
3 3 0
3 3 3
0 0 0
0 0 0
3 3 3
0 0 0];
M =[3,3,0,0,3,3,0,0,0,3,3,0,0,3,3,0,0,3,0]';
m = M;
m(m == 0) = nan;
%lo - define the indices of the values that need to be changed:
lo = fillmissing(m,'previous') == 3 & fillmissing(m,'next') == 3 & isnan(m);
% ii - assign numbers to intervals:
ii = cumsum([0;diff(lo)>0]).*lo;
%{
p - count the amount of each value of vector ii:
1 element - the number of zeros (0's);
2 element the number of values in the first interval.
3 element the number of values in the second interval, etc.:
%}
p = accumarray(ii(:)+1,1);
% Let a - the values for to be changed (vector with length equal max(ii), in our case - 4):
a = [3,4,4,3]'; % HERE fixed..
% Condition for intervals with length equal 1
a(p == 1) = 3;
% Replacement:
M(lo) = a(ii(lo));
i want to get result in this form:
M = [3 3 3
3 3 3
3 3 3
3 3 3
3 3 3
3 3 3
4 4 4
4 4 4
4 4 4
3 3 4
4 3 3
4 4 3
3 4 4
3 3 4
3 3 3
3 3 3
3 3 3
3 3 3
0 0 0];
Cooperation and guidance is highly appreciated. Warm regrads
M.S. Khan 2019년 8월 4일
Dr. Andrei Bobrov, Plz waiting for your professional reply. Thanks for all your professional cooperation and guidance. God bless you, sir.

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

### 카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

### Community Treasure Hunt

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

Start Hunting!

Translated by