按顺序打印Matrix中的整数,不重复

时间:2016-07-14 09:23:23

标签: matlab

我有几个matrices <1x1000>包含整数,例如:

matrix = [0,0,0,0,0,30,30,30,40,40,50,50,50,40,0,0,0,30,30,30]

我想打印(disp,后来plot)像这样: 30,40,50,40,30 。如果它们相继出现,基本上会忽略重复项。

另一个例子:

matrix = [0,0,0,0,10,10,10,10,50,50,50,50,10,10,10,50,50]应给出: 10,50,10,50

非常感谢帮助!

4 个答案:

答案 0 :(得分:3)

使用此:

[~,c]=find([NaN diff(matrix)]);
output=matrix(c);
output = output(output~=0)

并绘制输出,只需使用:plot(output)

答案 1 :(得分:2)

Result = 0;
% loop over all nonzero values in matrix
for Element = matrix
    if Element == Result(end)
        % skip if equal
        continue
    else
        % add new value
        Result(end+1) = Element;
    end
end
% discard zero entries
Result = Result(Result ~= 0);

答案 2 :(得分:1)

到目前为止提供的所有解决方案都使用循环或函数find,它们都是低效的。 只需使用矩阵索引:

[matrix((matrix(1:end-1)-matrix(2:end))~=0), matrix(end)]

ans =

0    30    40    50    40     0     30

顺便提一句,在你的例子中,即使它们按重复顺序排列,你也会放弃0 s?

答案 3 :(得分:0)

让我们调用输出矩阵um然后

um(1) = matrix(1);
j = 1;
for i=2: length(matrix)
  % Ignore repeating numbers
  if (um(j) ~= matrix(i))
    j = j + 1;
    um(j) = matrix(i);
  end
end

% Remove zeros
um = um(um~=0);