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 个评论
采纳的回答
Star Strider
2022-4-6
A = [8 1 6
3 0 7
4 9 2];
A(A==0) = NaN;
B = fillmissing(A,'previous',2) % With Original Matrix
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
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
B
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
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
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!