예제
예제 (Examples)
벡터화(vectorization)를 처음 익힐 때는 "반복문을 어떻게 한 줄로 바꾸지?"라는 질문이 가장 많아요. 이 문서는 실제 Octave 사용자들이 던졌던 벡터화 질문과 그 해답을 예시로 모아 둔 거예요.
출처: 문서
본문
벡터 A에 대해, 다음 반복문을 보죠.
n = length (A) - 1;
B = zeros (n, 2);
for i = 1:n
## this will be two columns, the first is the difference and
## the second the mean of the two elements used for the diff.
B(i,:) = [A(i+1)-A(i), (A(i+1) + A(i))/2];
endfor
각 행은 인접한 두 원소의 차이(첫 번째 열)와 그 둘의 평균(두 번째 열)으로 채워져요. 이 반복문은 다음 한 줄로 바꿀 수 있어요.
B = [diff(A)(:), 0.5*(A(1:end-1)+A(2:end))(:)]
diff(A)는 인접 원소의 차이를, 0.5*(A(1:end-1)+A(2:end))는 인접 두 원소의 평균을 만들어요. 여기서 핵심은 콜론 인덱싱 (:)으로 중간 결과를 열 벡터(column vector)로 펼치는 거예요. 이렇게 하면 반복문 없이 전체 벡터에 대해 한 번에 연산을 수행할 수 있어요. 중간 결과를 열 벡터로 평탄화하는 이런 방법은 자주 쓰는 벡터화 기법이에요.
더 알아보기
- 벡터화와 더 빠른 코드 실행(Vectorization and Faster Code Execution) 장 전체를 이어서 보면 좋아요.
diff함수와 다양한 인덱싱 기법도 함께 살펴보세요.