Matlab 按顺序打印矩阵中的整数,无重复项

Matlab 按顺序打印矩阵中的整数,无重复项,matlab,Matlab,我有几个包含整数的矩阵,例如: matrix = [0,0,0,0,0,30,30,30,40,40,50,50,50,40,0,0,0,30,30,30] 我想打印disp,然后像这样绘制:30,40,50,40,30。基本上忽略重复项,如果它们紧随其后 另一个例子: 矩阵=[0,0,0,0,10,10,10,10,10,50,50,50,10,10,10,50,50]应给出:10,50,10,50,50 非常感谢您的帮助 让我们调用输出矩阵um Result = 0; % loop ove

我有几个包含整数的矩阵,例如:

matrix = [0,0,0,0,0,30,30,30,40,40,50,50,50,40,0,0,0,30,30,30]
我想打印disp,然后像这样绘制:30,40,50,40,30。基本上忽略重复项,如果它们紧随其后

另一个例子:

矩阵=[0,0,0,0,10,10,10,10,10,50,50,50,10,10,10,50,50]应给出:10,50,10,50,50


非常感谢您的帮助

让我们调用输出矩阵um

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);

让我们调用输出矩阵um

使用以下命令:

[~,c]=find([NaN diff(matrix)]);
output=matrix(c);
output = output(output~=0)
要打印输出,只需使用:plotoutput

使用以下命令:

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

要绘制输出,只需使用:plotoutput

目前提供的所有解决方案都使用循环或函数find,这两种方法都是低效的。 只需使用矩阵指数化:

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

ans =

0    30    40    50    40     0     30

顺便问一下,在您的示例中,您是否在讨论0,即使它们以重复的顺序出现?

目前提供的所有解决方案都使用循环或函数find,这两种方法都是低效的。 只需使用矩阵指数化:

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

ans =

0    30    40    50    40     0     30

顺便问一下,在您的示例中,您是否在对0进行划分,即使它们以重复的顺序出现?

请使用实际的MATLAB语法给出一个实际矩阵数据的小示例,例如,矩阵=[0,0,0,0,0,30,30,30,30,30,40,40]或矩阵={[0,0,0,0,30,40,40],[0,0,30,30,30,30]}对于类似[10,20]的情况,您的意图是什么?可能有两种解决方案:[10 20]和[10 20]应该是[10 10 20]你收到了很多解决问题的想法。其中一些可能需要进一步编辑以满足您的需要,但我认为这是可以接受的。如果有人的答案解决了你的问题,你可能想接受它作为答案。请使用实际的MATLAB语法给出一个实际矩阵数据的小例子,例如,矩阵=[0,0,0,0,30,30,30,30,30,30,40]或矩阵={[0,0,0,0,30,30,40,40],[0,0,30,30,30,0]}在类似[10,20]的情况下,意图是什么?可能有两种解决方案:[10 20]和[10 20]应该是[10 10 20]你收到了很多解决问题的想法。其中一些可能需要进一步编辑以满足您的需要,但我认为这是可以接受的。如果有人的答案解决了你的问题,你可能想把它作为愚蠢问题的答案来接受,但我该如何打印呢?dispResult?@J.Smith类型结果,不带@J.Smith dispsprintf“%u\t\t”,结果也是一个可能的问题,但如何打印它?dispResult?@J.Smith类型结果,不带@J.Smith dispsprintf“%u\t\t”,结果也是可能的