2017-01-16 64 views
0

this matlab post中,可以找到“循环擦除随机游走”向量问题的解。这个问题在于“擦除循环”,意思是:在任何整数重复之间移除整数。平面循环擦除随机游走(matlab)

实施例:

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

将下标转换为索引,我们链接的解决方案? – beaker

+0

我对问题定义有疑问。 (为了简洁起见),我们将自己限制在一维向量中,你会期望输出是用于输入的[1,2,3,4,3,5,4]。输出是[1,2,3]还是[1,2,3,5,4]?上面提到的解决方案会导致前者,但输出后面的IMO更有意义。 – aksadv

回答

0

您在问题中链接的线程中的答案之一解决了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]; 

解琐碎的修改1-d问题从what's published here

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] 
+0

谢谢。您的2d转换为1d复杂格式是找到平面解决方案的一种很好的方式。关于你的第一条评论,预期产出当然是[1,2,3,5,4]。 – sapienz