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

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

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

141 141 141 142 ...
141 141 141 142 ...
141 141 141 142 ...
141 141 141 142 ...
149 148 150 150 ...
 .   .   .   .  ...
 .   .   .   .  ...

任何帮助深表感谢。谢谢

回答

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

result = Cr(cummax((Cr~=0).*(1:size(Cr,1)).', 1) + (0:size(Cr,1):numel(Cr)-1));

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

  • 单例扩展
  • 线性索引
  • cummax.

例子:

>> 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


以上是Matlab:用最后一个非零索引替换零的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>