平面循环擦除随机游走(matlab)

时间:2017-01-16 21:48:57

标签: matlab random-walk

this matlab post中,可以找到“循环擦除随机游走”矢量问题的解决方案。这个问题在于“擦除循环”,这意味着:删除任何整数重复之间的整数。

示例:

v=[3 1 4 6 7 9 1 22 87 33  35 36 37 35 34] becomes [3 1 22 87 33 35 34].

如何用2列矩阵(平面情况)解决同样的问题?

v=[1 1; 2 1; 2 2; 2 3; 3 3; 3 2; 2 2; 2 3; 2 4] should be [1 1; 2 1; 2 2; 2 3; 2 4]

1 个答案:

答案 0 :(得分:0)

您在问题中链接的帖子中的一个答案解决了一维向量的问题。可以使用real-imaginarty到复数变换将2-D阵列变换为1-D复矢量(并且返回)。因此,以下可能是一个解决方案:

v=[1 1; 2 1; 2 2; 2 3; 3 3; 3 2; 2 2; 2 3; 2 4];
% from your example. note the change in variable name.

% convert the 2-D array into 1-D using real-imag to complex trasnform
u = v*[1;i];

通过what's published here的简单修改解决1-D问题:

off = false;  % Faster to call function FALSE once
n   = length(u);
use = true(1, n);
i = 1;
while i <= n
    multi = find(u(i:n) == u(i), 1, 'last');
    use((i + 1):(i + multi - 1)) = off;
    i = i + multi;
end

最后,从输入矩阵中选择所选行:

v = v(use,:)
%  [1 1;  2 1;  2 2;  2 3;  2 4]