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