Matlab:用最后一个非零索引替换零

Ash*_*har 1 arrays matlab image-processing matrix

我有一个大小为 352x240 uint_8 的矩阵 Cr。 输出矩阵

如何用最后一个非零索引替换零?例如,输出应该是这样的:

141 141 141 142 ...
141 141 141 142 ...
141 141 141 142 ...
141 141 141 142 ...
149 148 150 150 ...
 .   .   .   .  ...
 .   .   .   .  ...
Run Code Online (Sandbox Code Playgroud)

任何帮助深表感谢。谢谢

Lui*_*ndo 7

这适用于零和非零的出现不一定是周期性的或跨列一致的一般情况。它假设第一行不包含零(否则问题未定义):

result = Cr(cummax((Cr~=0).*(1:size(Cr,1)).', 1) + (0:size(Cr,1):numel(Cr)-1));
Run Code Online (Sandbox Code Playgroud)

要了解它的工作原理,请参阅:

例子:

>> Cr = [141 141 141; 0 0 0; 0 0 145; 147 0 0; 149 148 0; 0 0 0]
Cr =
   141   141   141
     0     0     0
     0     0   145
   147     0     0
   149   148     0
     0     0     0

>> result = Cr(cummax((Cr~=0).*(1:size(Cr,1)).', 1) + (0:size(Cr,1):numel(Cr)-1))
result =
   141   141   141
   141   141   141
   141   141   145
   147   141   145
   149   148   145
   149   148   145
Run Code Online (Sandbox Code Playgroud)