[英]Matlab: Replace zeros with last non-zero index
當零和非零的出現不一定是周期性的或跨列一致時,這適用於一般情況。 它假定第一行不包含零(否則問題未定義):
result = Cr(cummax((Cr~=0).*(1:size(Cr,1)).', 1) + (0:size(Cr,1):numel(Cr)-1));
要了解它的工作原理,請參閱:
例子:
>> 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
如果我們像 C++ 中的矩陣數組一樣思考,這應該可以工作:
matrix[n][m]=matrix[n-((n-1)%4)][m]
所有非 0 的數字都在索引 (1,5,9,13...) 中。 所以它是n = 1(mod4)。 簡單的數學可以解決這個問題。
使用范圍索引和repelem
:
result = repelem(Cr(1:4:end, :), 4, 1);
編輯
在一般情況下,可以使用此方法:
f = find(Cr);
result = reshape(repelem(Cr(f), diff([f;numel(Cr)+1])), size(Cr));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.