넘파이 4편: 고급 넘파이

주요 내용

부록 A(p. 587)의 내용 중 가장 많이 사용되는 고급 기능을 다룬다.

기본 설정

numpy 모듈과 시각화 도구 모듈인 matplotlib.pyplot에 대한 기본 설정을 지정한다.

A.2 어레이 조작 고급 기법 (p. 590)

어레이를 조작하는 몇 가지 중요한 고급 기법을 살펴본다.

A.2.1 어레이 모양 변형 (p. 590)

reshape() 메서드

reshape() 메서드를 활용하여 지정된 튜플의 모양으로 주어진 어레이의 모양을 변형한다. 단, 항목의 수가 변하지 않도록 모양을 지정해야 한다.

예를 들어, 길이가 8인 1차원 어레이가 다음과 같다.

이제 (4, 2) 모양의 2차원 어레이로 모양을 변형할 수 있다.

항목의 수만 같으면 임의의 차원의 어레이를 임의의 차원의 어레이로 변형시킬 수 있다.

-1의 역할

어레의 모양을 지정할 때 튜플의 특정 위치에 -1을 사용할 수 있다. 그러면 그 위치의 값은 튜플의 다른 항목의 정보를 이용하여 자동으로 지정된다. 예를 들어, 아래 코드에서 -1은 4를 의미한다. 이유는 20개의 항목을 5개의 행으로 이루어진 2차원 어레이로 지정하려면 열은 4개 있어야 하기 때문이다.

동일한 이유로 아래에서 -1은 5를 의미한다.

A.3.1 차원 추가(p. 604)

어레이에 임의의 축을 추가하는 방식으로 1차원 커진 어레이를 생성할 수 있다. 어느 축을 지정하느냐에 따라 다른 모양을 갖게 된다.

예제

다음 길이가 3인 1차원 어레이를 이용하자.

아래 코드는 열 관련 축을 추가한다.

reshape() 메소드로도 동일한 결과를 얻을 수 있다.

아래 코드는 행 관련 축을 추가한다.

예제

2차원 어레이에 축을 추가하면 3차원 어레이가 생성되며, 작동방식은 앞서와 동일하다.

ravel() 메서드와 flatten() 메서드

두 메서드 모두 1차원 어레이를 반환한다. 즉, 차원을 모두 없앤다.

차이점은 ravel() 메서드는 뷰(view)를 사용하는 반면에 flatten() 메서드는 어레이를 새로 생성한다. 예를 들어, 아래처럼 arr1의 항목을 변경하면 arr의 항목도 함께 변경된다.

arr2arr과 전혀 상관이 없다.

A.2.3 어레이 쪼개기/쌓기 (p. 594)

np.split() 함수

어레이를 지정된 기준에 따라 여러 개의 어레이로 쪼갠다. 반환값은 쪼개진 어레이들의 리스트다.

아래 예제를 살펴보자.

np.split() 함수의 인자는 정수이거나 정수들의 리스트가 사용된다. 먼저, 정수 리스트가 들어오면 축이 정한 방향으로 리스트에 포함된 정수를 이용하여 여러 개의 구간으로 쪼갠다.

아래 코드는 행을 기준으로 행의 인덱스를 0-1, 2, 3-4, 5-7 네 개의 구간으로 쪼갠다. 따라서 결과는 네 개의 어레이로 이루어진 리스트가 되며, 각 어레의 모양은 다음과 같다.

(2, 5), (1, 5), (2, 5), (2, 5)

반면에 열을 기준으로 0, 1-2, 3-4 3개의 구간으로 쪼개면 다음과 같으며, 각 어레이의 모양은 다음과 같다.

(7, 1) (7, 2), (7, 2)

np.vsplit()/np.hsplit() 함수

두 함수는 np.split() 함수에 축을 각각 0과 1로 지정한 함수이다.

np.concatenate() 함수

두 개의 어레이를 이어 붙이다. 지정되는 축에 따라 좌우로 또는 상하로 이어붙인다.

아래 두 어레이가 주어졌다고 가정하다.

위아래로 이어붙이려면 축을 0으로 정한다.

주의사항: 인자가 길이가 2인 리스트이다.

좌우로 이어붙이려면 축을 1로 정한다.

np.vstack()/np.hstack() 함수

두 함수는 np.concatenate() 함수에 축을 각각 0과 1로 지정한 함수이다.

주의사항: 인자가 길이가 2인 튜플이다.

np.r_[]/np.c_[] 객체

vstack()/hstack() 과 동일한 기능을 수행하는 특수한 객체들이다.

아래 세 개의 어레이를 이용하여 사용법을 살펴본다.

아래 코드는 np.vstack((arr1, arr2))와 동일하다.

아래 코드는 np.hstack((arr1, arr2))와 동일하다.

행 또는 열의 크기를 적절하게 맞출 수 있는 어떤 조합도 가능하다.

A.3 브로드캐스팅 (p. 601)

예제

arr * 4 아래 어레이의 곱셈과 동일하다.

예제

예제

예제

예제

예제

A.3.2 브로드캐스팅으로 어레이에 값 대입하기 (p. 606)