Python/NumPy | Pandas

[Python] NumPy - 배열의 생성과 변형 1

비번변경 2022. 11. 13. 22:57

개요

2022.11.11 - [Python] NumPy - 배열 1

2022.11.12 - [Python] NumPy - 배열 2 (인덱싱과 슬라이싱)

에 이어 NumPy에 대해서 계속 정리한다.

 

 

자료형

NumPy의 배열(ndarray 클래스 객체) 내 원소는 모두 같은 자료형이어야 한다. array 함수로 배열 생성 시 dtype 인수를 사용하여 자료형을 명시적으로 지정할 수 있다. 전달한 매개변수가 없으면 타입을 추론하게 된다.

자료형을 지정할 때는 아래와 같은 dtype 접두사 + 바이트/글자 수를 전달하여 지정한다. 숫자는 생략할 수 있고, 생략 시에는 OS에 따라 적절한 크기로 지정된다.

dtype 접두사 설명 사용 예
b 불리언 b (참 혹은 거짓)
i 정수 i8 (64비트)
u 부호 없는 정수 u8 (64비트)
f 부동소수점 f8 (64비트)
c 복소 부동소수점 c16 (128비트)
O 객체 0 (객체에 대한 포인터)
S 바이트 문자열 S24 (24 글자)
U 유니코드 문자열 U24 (24 유니코드 글자)
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], dtype='f')

 

만들어진 배열의 자료형은 dtype 속성으로 확인할 수 있다.

x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], dtype='f')
x.dtype

실행 결과

dtype('float32')

 

 

Inf / NaN

Inf와 NaN은 NumPy에서 무한대(np.inf; infinity)와 정의할 수 없는 숫자(np.nan; not a number)를 표현할 때 사용한다.

0이 아닌 숫자를 0으로 나눈 값, 0을 0으로 나눈 값을 계산하려고 할 때 발생한다.

np.array([0, 1, -1, 0]) / np.array([1, 0, 0, 0])

실행 결과

array([  0.,  inf, -inf,  nan])

 

 

배열 생성

NumPy에서 자주 사용하는 단순한 배열은 함수로 생성할 수도 있다. 다차원 배열도 생성할 수 있다.

  • zeros : 0으로 초기화된 배열
np.zeros(5)

# 실행 결과
array([0., 0., 0., 0., 0.])
  • ones : 1로 초기화된 배열
np.ones(5)

# 실행 결과
array([1., 1., 1., 1., 1.])
  • zeros_like : 0으로 초기화된 배열. 다른 배열의 크기를 참조한다.
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], dtype='f')
np.zeros_like(x)

# 실행 결과
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)
  • ones_like : 1로 초기화된 배열. 다른 배열의 크기를 참조한다.
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], dtype='f')
np.ones_like(x)

# 실행 결과
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], dtype=float32)
  • empty : 특정 값으로 초기화하지 않은 배열. 배열의 크기가 커 초기화에 시간이 걸리는 경우 사용한다.
np.empty((2, 3))

# 실행 결과
array([[ 4.63939877e-308, -5.64938534e+036, -1.78409531e+046],
       [-4.32950182e-035, -8.72433218e-026, -1.57234264e-063]])
  • arange : 특정한 규칙에 따라 증가하는 수열 생성. 시작 값, 끝 값(미포함), 단계를 전달하면 된다. 
np.arange(3, 21, 2)

# 실행 결과
array([ 3,  5,  7,  9, 11, 13, 15, 17, 19])
  • linspace : 선형 구간을 지정한 지정한 구간의 수만큼 분할한다.
np.linspace(0, 100, 5)

# 실행 결과
array([  0.,  25.,  50.,  75., 100.])
  • logspace :  로그 구간을 지정한 구간의 수만큼 분할한다.
np.logspace(0.1, 1, 10)

# 실행 결과
array([ 1.25892541,  1.58489319,  1.99526231,  2.51188643,  3.16227766,
        3.98107171,  5.01187234,  6.30957344,  7.94328235, 10.        ])

 

 

전치 연산

배열의 T 속성으로 행과 열이 바뀐 배열을 구할 수 있다.

A = np.array([[1, 2, 3], [4, 5, 6]])
A
A.T

실행 결과

array([[1, 2, 3],
       [4, 5, 6]])
       
array([[1, 4],
       [2, 5],
       [3, 6]])

 

 

 

참고 문서

데이터 사이언스 스쿨 - 3.2 배열의 생성과 변형