从矢量MATLAB中删除连续的重复项

时间:2012-06-12 13:34:37

标签: matlab vector duplicates

这是我的MATLAB代码:

[numeric, pics] = xlsread('matrix.xls');
[r,c] = size(pics);
done = r*c;

randvecall = randsample(done, done, true);
randvec = randvecall([1,diff(randvecall)]~=0);
currk = randvec(k);

基本上它的作用是从Microsoft Excel电子表格构建一个值数组。我希望在数组中有重复项,但不是连续的重复项,所以我添加了一行代码来删除它们。当我手动输入值到randvecall并运行上面的代码时,它完美地工作。但是,当我运行上面的代码时,我收到以下错误:

??? Error using ==> horzcat
CAT arguments dimensions are not consistent.

Error in ==> testAS_randsample at 76
randvec = randvecall([1,diff(randvecall)]~=0);

为什么会这样?例如,这有效:

randvecall=[1 2 3 4 5 5 5 5 8 7 8 8];
randvec = randvecall([1,diff(randvecall)]~=0);
disp(randvec)

randvec = [1 2 3 4 5 8 7 8]

这正是我希望我的代码所做的事情。但为什么我的实际代码会给我带来horzcat错误消息?任何人都可以帮我吗?它必须与randsample构建randvecall数组的方式有关,但我无法弄清楚为什么会给我这个错误信息?

1 个答案:

答案 0 :(得分:3)

这似乎是randsample(n,k,true)工作原理的问题:它返回1xk向量,而您需要kx1向量。转置randvecall应该可以解决问题。

修改

让我在一般读者的代码中重新措辞:

randvec = randvecall([1,diff(randvecall')]~=0);