我正在尝试切断输入数组的前导和/或尾随零,这些输入数组可能有也可能没有。我已经看到了诸如以下问题的答案:
MATLAB - Remove Leading and Trailing Zeros From a Vector
这个工作正常,直到我的输入数组实际上没有用零开始/结束:
input = [ 1 2 0 3 4 0 0 0 0 ]
如果这是我的输入数组,上述问题的答案将会切断我需要的值。
当不能保证它们会在那里时,是否有一种简洁的方式(即没有多长时间'如果'语句)删除前导/尾随零?
编辑以澄清:
我知道我可以使用find()
函数来获取非零索引数组,然后执行以下操作:
indexes = find(input)
trimmed_input = input( indexes(1):indexes(end) )
但是出现问题,因为我无法保证输入数组将具有尾随/前导零,并且可能(可能会)在非零值之间具有零。所以我的输入数组可能是以下之一:
input1 = [ 0 0 0 nonzero 0 nonzero 0 0 0 ] => [ nonzero 0 nonzero ]
input2 = [ nonzero 0 nonzero 0 0 0 ] => [ nonzero 0 nonzero ]
input3 = [ 0 0 0 nonzero 0 nonzero ] => [ nonzero 0 nonzero ]
input4 = [ 0 0 0 nonzero nonzero 0 0 0 ] => [ nonzero nonzero ]
input5 = [ 0 0 0 nonzero nonzero ] => [ nonzero nonzero ]
input6 = [ nonzero nonzero 0 0 0 ] => [ nonzero nonzero ]
使用上述方法,在input2
或input3
上将修剪我想要保留的值。
答案 0 :(得分:1)
我现在可以想到以单行方式做单行的方式,但我认为这应该有效:
if input(1)==0
start = min(find(input~=0))
else
start = 1;
end
if input(end)==0
endnew = max(find(input~=0))
else
endnew = length(input);
end
trimmed_input = input(start:endnew);
修改强>
哈,发现了一个班轮:)trimmed_input = input(find(input~=0,1,'first'):find(input~=0,1,'last'));
不知道这实际上是快还是不太复杂。
另一种选择(了解@jrbedard的意思):
trimmed_input = input(min(find(input~=0)):max(find(input~=0)));
答案 1 :(得分:0)