2

早安/午安~~

我必须对以下数组进行排序,并用 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 ]

我该如何解决这个问题?

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

4

2 回答 2

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
于 2013-04-16T11:50:41.927 回答
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
于 2013-04-16T11:54:32.073 回答