早上好/下午~~
我必须对以下数组进行排序,并将一些值替换为0。
A=[9 NaN 7 7 7 7 NaN 7 7 7 7 NaN 9 9 9 NaN 4 4 4 4 NaN ]
% The output should be>>>
A=[9 NaN 7 0 0 0 NaN 7 0 0 0 NaN 9 0 0 NaN 4 0 0 0 NaN ]
通过使用unique()函数,第二个NaN之后的7和第三个NaN之后的9将被0替换。 所以我只能得到结果:
[c, ia] = unique(A, 'first');
t = A;
t(iA) =0;
A = A-t;
A=[9 NaN 7 0 0 0 NaN 0 0 0 0 NaN 0 0 0 NaN 4 0 0 0 NaN ]
我该如何解决这个问题?
任何帮助将不胜感激! 感谢。
答案 0 :(得分:0)
蛮力呢?
% Data
A_in = [9 NaN 7 7 7 7 NaN 7 7 7 7 NaN 9 9 9 NaN 4 4 4 4 NaN];
% Processing
A_out = zeros(size(A_in));
prev_char = [];
for ii=1:numel(A_in),
if A_in(ii)==prev_char
A_out(ii)=0;
else
A_out(ii)=A_in(ii);
end
prev_char = A_in(ii);
end
答案 1 :(得分:0)
矢量化解决方案:
% Flip A (or you will zero out every one in the sequence except the last one)
B = A(end:-1:1);
dfB = diff(B);
idx = ~isnan(dfB);
B(idx) = dfB(idx);
% Flip back into A
A = B(end:-1:1)
修改强> 没有创建B,有点模糊:
dfA = diff(A(end:-1:1));
A([false ~isnan(dfA(end:-1:1))]) = 0