排序数组(重复数据,0值和NaN)

时间:2013-04-16 11:42:49

标签: matlab duplicates unique

早上好/下午~~

我必须对以下数组进行排序,并将一些值替换为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 ]

我该如何解决这个问题?

任何帮助将不胜感激! 感谢。

2 个答案:

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