【问题标题】:Removing consecutive duplicates from vector MATLAB从向量 MATLAB 中删除连续重复项
【发布时间】:2012-06-12 13:34:37
【问题描述】:

这是我的 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 数组的方式有关,但我不明白为什么这会给我那个错误消息?

【问题讨论】:

  • Matlab 函数randsample 返回一个列向量,这就是您使用的水平连接(“horzcat”)失败的原因([1;diff(randvecall(:))] 在这两种情况下都可以使用)。

标签: matlab vector duplicates


【解决方案1】:

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

编辑:

让我为普通读者改写代码:

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

【讨论】:

    猜你喜欢
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2014-04-19
    • 2018-08-05
    • 1970-01-01
    相关资源
    最近更新 更多