벡터가 v = [NaN NaN 1 2 3 4 NaN NaN NaN 4 5 6]
인데 각 연속 블록의 숫자 평균이 NaN
이 아니라고 가정합니다. MATLAB에서 효율적인 방법은 무엇입니까? (물론, 실제 벡터이 예보다 훨씬 큰 무언가이다.)MATLAB에서 벡터의 블록 평균을 계산
답변
다음은 Image Processing Toolbox가 필요없는 벡터화 된 솔루션입니다.
는 귀하의 의견이 약간 더 복잡한 (나는 가장자리 케이스 포함)입니다 가정 :
v = [NaN NaN 1 2 3 4 NaN NaN NaN 4 5 6 NaN 3 NaN 3 4]
% Index non NaNs
nonNaN = ~isnan(v(:));
% Find the beginning of a sequence and the element after the end
subs = diff([0; nonNaN]);
start = subs == 1;
ends = subs == -1;
% Start labeling sequences progressively
subs(start) = 1:nnz(start);
subs(ends) = -(1:nnz(ends));
% Expand the labeling
subs = cumsum(subs);
% Use accumarray
accumarray(subs(nonNaN), v(nonNaN),[],@mean)
이 충분히 효율적입니다 경우에 당신이 볼 수
나는이이보다 더 효율적으로 발견 긴 벡터v
에 대한 놀랍게도
b=bwlabel(isfinite(v));
m=zeros(1,max(b));
for n=1:max(b)
id=find(b==n);
m(n)=mean(v(id));
end
논리적 인덱싱 옵션 mean(v(b==n))
...
감사를 bwlabel''을 가리키는 위해. – passerby51
@ passerby51'bwlabel'과'accumarray'를 함께 사용할 수 있습니다. 0 인덱스를 버려야 할 것입니다. – Justin
@jucestain, yes'accumarray'는이 문제를 다루는 좋은 방법 인 것 같습니다. 0을 던지기 위해서, 이것은'subs = b (b ~ = 0)'으로 충분할 것입니다. – passerby51
- 1. MATLAB에서 계산 실행 평균
- 2. Matlab에서 벡터의 변수를 푸시
- 3. matlab에서 벡터의 요소를 변환
- 4. Matlab에서 반복적으로 열의 평균을 취합니다.
- 5. 평균을 퍼센트로 계산 하시겠습니까?
- 6. 평균을 계산 하시겠습니까?
- 7. Matlab에서 벡터의 각 셀을 복제하십시오.
- 8. Matlab에서 벡터의 극한값을 제거 하시겠습니까?
- 9. 두 벡터의 계산 도트
- 10. 블록 단위로 평균을 취함 Cuda
- 11. matlab에서 이미지의 블록 처리
- 12. matlab에서 블록 공액 그라디언트
- 13. 문자열 벡터의 단어 개수 계산
- 14. Matlab에서 소계 계산
- 15. Matlab에서 역행렬 계산
- 16. matlab에서 이자율 트리 계산
- 17. 이 비닝 및 평균을 MATLAB에서 어떻게 수행해야합니까?
- 18. matlab에서 고르지 않은 가중치에 대한 평균을 계산하십시오.
- 19. MATLAB에서 1 시간 단위로 데이터 평균을 계산합니다.
- 20. MATLAB에서 이동 평균을 수행하는 방법은 무엇입니까?
- 21. MATLAB에서 서로 상대적인 두 벡터의 순위 지정
- 22. MATLAB에서 벡터의 수치 적분을 어떻게 수행합니까?
- 23. matlab에서 N 차원 표면과 벡터의 컨볼 루션
- 24. 는 MATLAB에서 벡터의 반복 값을 검색하는 방법
- 25. matlab에서 벡터의 표준을 1로 비교할 수 없습니다.
- 26. MATLAB에서 정렬 된 벡터의 속도 향상
- 27. MATLAB에서 벡터의 세그먼트 인덱스를 찾는 방법은 무엇입니까?
- 28. matlab에서 벡터의 두 연속 요소를 조작합니다.
- 29. MATLAB에서 벡터의 첫 번째 N 요소 정렬
- 30. Matlab에서 벡터의 정렬 값을 정렬하는 방법은 무엇입니까?
나는'accumarray'가 갈 방법이라고 생각합니다. – Justin
감사합니다.'cumsum'을 매우 영리하게 사용합니다. 또한'accumarray '에 감사드립니다. 나는 오랫동안 이와 같은 명령을 찾고있었습니다. – passerby51
이 아마도 가장 효율적인 솔루션 일 것입니다. +1 – bla