我有几个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
非常感谢帮助!
答案 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);