2016-06-17 2 views
0

배열 A = [ 1 3 4 6 7 8]과 같은 크기의 다른 배열 S = [1 1 0 1 0 1]이 있다고 해봅시다.배열이 항상 증가하는지 확인하려고 시도합니다.

배열의 전체 길이에 대해 이 A(i-1)+S(i-1)보다 크거나 같은지 확인해야합니다. 즉, A + S이 단조롭게 증가하는지 확인하고 있습니다.

그러나 S(i-1)이 0이면 A(i)+S(i)A(i-2)+S(i-2)을 대신 비교하고 싶습니다.

간단히 말해서 A+S의 모든 요소가 단조롭게 증가하는지 확인해야합니다. 즉, S=0 인 요소는 무시합니다.

+0

괜찮습니까 ..... 그래서 무엇입니까 th 전자 질문? – ale64bit

+3

['diff'] (http://mathworks.com/help/matlab/ref/diff.html)가 부정적이되면 더 이상 증가하지 않습니다. S = 0 요소를 제거하려면 [논리 색인 생성] (http://stackoverflow.com/questions/32379805/linear-indexing-logical-indexing-and-all-that)을 사용하십시오. – Adriaan

답변

1

특히 큰 행렬

을에,이

isequal(sort(A(S)),A(S)) % or isequal(sort(A(S==1)),A(S==1)) 

또는 S 논리 매트릭스가 아닌 경우, 즉 1보다 다른 값을 가질 수 있고 0

idx = S ~= 0; 
isequal(sort(A(idx)),A(idx)) 

아드리안의 제안을 빨리해야한다 시도

all(diff(A(S~=0)) >= 0) % or replace >= with > if you want it to be strictly increasing 
관련 문제