Replacing a zero value of a matrix with the value left to it

1 次查看(过去 30 天)
Suppose I have a matrix
A =
8 1 6
3 0 7
4 9 2
Now I would like the 0 value to be replaced by the value 3 (the value left of it).
This is an illustrative example for a small matrix. I would like to apply this approach to a much larger matrix
  2 个评论
Torsten
Torsten 2022-4-6
What if there is another 0 left to it ? Or if the 0 is in the first column ?
Wietze Zijpp
Wietze Zijpp 2022-4-6
Good Question, One way to deal with this could be to search for a value which is not and then replace the zeros with that value

请先登录,再进行评论。

采纳的回答

Star Strider
Star Strider 2022-4-6
One approach using fillmissing
A = [8 1 6
3 0 7
4 9 2];
A(A==0) = NaN;
B = fillmissing(A,'previous',2) % With Original Matrix
B = 3×3
8 1 6 3 3 7 4 9 2
A = [8 1 6
0 0 7
4 9 2];
A(A==0) = NaN;
B = fillmissing(A,'nearest',2) % With Matrix With First Two Rows Being Zero
B = 3×3
8 1 6 7 7 7 4 9 2
It would be necessary to use an if block to test for the second condition and then choose the 'nearest' method for that condition. That could go something like this:
A = [8 1 6
0 0 7
4 9 2
5 0 0];
B = A; % Create Result MAtrix
B(B==0) = NaN;
for k = 1:size(A,1)
ixr = find(A(k,:)==0);
if ~isempty(ixr) & any(ixr==1)
B(k,:) = fillmissing(B(k,:),'nearest',2);
elseif ~isempty(ixr) & ~any(ixr==1)
B(k,:) = fillmissing(B(k,:),'previous',2);
end
end
A
A = 4×3
8 1 6 0 0 7 4 9 2 5 0 0
B
B = 4×3
8 1 6 7 7 7 4 9 2 5 5 5
The loop, and testing each row, seems to me to be the only way to code this, considering that two different interpolation methods are required, depending on the position of the zeros in each row.
.
  1 个评论
DGM
DGM 2022-4-6
编辑:DGM 2022-4-6
Well this is way neater than what I came up with, but I can offer this bit of a modification from what I was doing:
A = [8 1 6
0 3 7 % this row uses 'nearest'
4 9 2
5 0 0];
B = [fliplr(A) A]; % book-matched array
B(B==0) = NaN;
B = fillmissing(B,'previous',2);
B = B(:,size(A,2)+1:end) % trim off excess
B = 4×3
8 1 6 3 3 7 4 9 2 5 5 5

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by