입력 배열의 선행 및 / 또는 후행 0을 잘라내려고합니다. 다음과 같은 질문에 대한 답변을 보았습니다.
그리고 이것은 내 입력 배열이 실제로 0으로 시작 / 종료되지 않을 때까지 잘 작동합니다.
input = [ 1 2 0 3 4 0 0 0 0 ]
이것이 내 입력 배열이라면 위의 질문에 대한 대답은 필요한 값을 잘라낼 것입니다.
선행 / 후행 0을 제거 할 수있는 간결한 방법 (예 : 긴 'if'문 없음)이 있습니까?
명확히하기 위해 편집 :
find()
함수를 사용하여 0이 아닌 인덱스 배열을 가져온 다음 다음과 같은 작업을 수행 할 수 있다는 것을 알고 있습니다 .
indexes = find(input)
trimmed_input = input( indexes(1):indexes(end) )
그러나 입력 배열에 후행 / 선행 0이 있고 0이 아닌 값 사이에 0이있을 수 있다는 보장이 없기 때문에 문제가 발생합니다. 따라서 내 입력 배열은 다음 중 하나가 될 수 있습니다.
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
유지하려는 값을 트리밍합니다.
나는 지금 한 줄로 깔끔한 방법을 생각할 수 있지만 이것이 효과가 있다고 생각합니다.
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)));
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다