넘파이 기초 :: Python 빅데이터 처리와 시각화 - mindscale
Skip to content

넘파이 기초

numpy

numpy: 수학 계산을 위한 Python 라이브러리

numpy의 주요 기능: - 여러 가지 수학 함수 - 배열(array)

배열: 여러 개의 값을 순서대로 묶어서 처리하는 자료 구조(list와 비슷)

numpy 임포트

  • as는 약칭
  • numpynp라고 쓸 수 있게 됨
  • 대부분 자료들이 이렇게 하고 있으니까 똑같이 하면 다른 자료를 참고하실 때 도움
import numpy as np

1차원 배열 만들기

  • 데이터가 한 줄로 있어서 1차원 배열
  • 수학에서는 벡터
  • 파이썬의 리스트와 비슷
x = [1, 2, 'hello']  # 리스트
  • numpy 배열은 모든 값의 자료형이 같음. [1, 'hello']처럼 섞어 쓸 수 없음
  • 길이도 고정
  • 계산 속도를 높이기 위함

np.array를 이용해 리스트를 배열로 변환

a = np.array([1, 2, 3])
a
array([1, 2, 3])

배열의 모양

.ndim은 배열의 차원을 나타냄. 1차원 배열이므로 1

a.ndim
1

.shape은 배열의 모양을 나타냄. 3개의 값이 있으므로 (3, )

3이 아니라 (3, )으로 출력되는 이유는 튜플(tuple)형이기 때문. (2차원 배열인 경우는 (3, 2), 3차원 배열인 경우는 (3, 4, 1) 등의 형태가 됨)

a.shape # 모양
(3,)

dtype

  • 배열에는 자료형이 한 가지만 들어간다, 배열의 자료형은 dtype으로 확인
  • int는 정수, -2, -1, 0, 1, 2, 3 이렇게 소수점 없는 것
  • float은 실수
  • 8, 16, 32, 64는 몇 비트인가, 얼마나 큰 수까지 표현할 수 있는가
  • 2진수 자리 수
  • 자리수가 클 수록 더 큰 수, 실수의 경우에는 더 자세히
  • 계산 속도가 늦어지는 단점, 필요에 따라 결정
a.dtype  # int: 정수(소수점 이하 X), 32 bit
dtype('int32')

자료형은 기본적으로 자동 결정되지만 배열을 만들 때 dtype으로 지정할 수도 있음

a = np.array([1, 2, 3], dtype='float32')
a
array([1., 2., 3.], dtype=float32)
a.dtype
dtype('float32')

이미 만들어진 배열에 astype 메소드를 이용하면 자료형을 변환할 수 있음

a = a.astype('int32')
a.dtype
dtype('int32')

배열 + 수

  • numpy 배열의 장점은 그냥 수처럼 계산이 가능하다는 것
  • 배열에 수 하나를 더하거나 곱하거나 하면 배열의 모든 값에 더해지거나 곱해진다
  • 빼기, 나누기 등등도 마찬가지
a
array([1., 2., 3.], dtype=float32)
a + 1
array([2, 3, 4])
a * 10
array([10, 20, 30])

배열 + 배열

  • 배열끼리 계산할 수도 있는데, 이때는 원소들끼리 짝을 지어 계산
a + a
array([2., 4., 6.], dtype=float32)
a * a
array([1., 4., 9.], dtype=float32)

길이가 안 맞으면 에러

b = np.array([5, 6, 7, 8])
a + b
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-15-bd58363a63fc> in <module>
----> 1 a + b

ValueError: operands could not be broadcast together with shapes (3,) (4,) 

배열 인덱싱

배열의 인덱싱은 리스트와 같음

a[0]
1.0
a[1]
2.0
a[-1]
3.0

2차원 배열 만들기

  • 1차원 배열은 데이터가 한 줄로 서있는 것
  • 2차원 배열은 데이터가 가로방향, 세로방향 두 방향으로 있는 것
  • 1차원에서는 데이터가 어디있는지 숫자 하나로 나타낼 수
  • 2차원은 숫자가 2개가 필요함, 그래서 2차원
b = np.array(
    [
        [1, 5, 9],
        [2, 6, 8],
        [3, 4, 7]
    ]
)
b
array([[1, 5, 9],
       [2, 6, 8],
       [3, 4, 7]])
b.shape
(3, 3)
b.ndim
2

저장

np.save('a.npy', a)
np.savetxt('b.csv', b)

불러오기

np.load('a.npy')
array([1, 2, 3])
np.loadtxt('b.csv', dtype='int32')
array([[1, 5, 9],
       [2, 6, 8],
       [3, 4, 7]])