numpy 모듈을 사용하여 ndarray 데이터 생성하기

numpy 모듈을 사용하여 ndarray 데이터 생성하기

  • numpy

    • 넘파이
    • 수치해석용 Python 라이브러리
    • CPython에서만 사용 가능
    • BLAS/LAPACK 기반
    • ndarray 다차원 행렬 자료 구조 제공
    • 내부 반복문 사용으로 빠른 행렬 연산 가능
    • 행렬 인덱싱(array indexing) 기능

      데이터 사이언스 스쿨

  • ndarray 클래스

    • 다차원 행렬 자료 구조를 지원
    • 벡터화 연산(vectorized operation) 지원
  • Python 리스트

    • 여러가지 타입의 원소
    • linked List 구현
    • 메모리 용량이 크고 속도가 느림
    • 벡터화 연산 불가
  • NumPy ndarray

    • 동일 타입의 원소
    • contiguous memory layout
    • 메모리 최적화, 계산 속도 향상
    • 벡터화 연산 가능
  • 행렬의 차원 및 크기는 ndim 속성과 shape 속성으로 알 수 있다.

1
2
# 필요 모듈 호출
import numpy as np
1
2
3
4
5
6
7
8
9
10
# 1차원 벡터
x = np.array([1, 2, 3, 4])
print(x)
# 2차원 행렬(2행 3열), 리스트안에 리스트로 만듬
y = np.array([[2, 3, 4], [1, 2, 5]])
print(y)
# 타입 확인
print(type(y))
# 차원 확인
print(x.ndim, y.ndim)

np.arange 함수로 생성하기

1
2
# 0 ~ 9까지 ndarray 생성
np.arange(10)
1
2
# 1 ~ 9까지 ndarray 생성
np.arange(1, 10)
1
2
# 1 ~ 9까지 2칸씩 띄어서 생성
np.arange(1, 10, 2)
1
2
# 5 ~ 100까지 5의 배수 생성
np.arange(5, 101, 5)

zeros, ones

1
2
# 4행 5열의 모든 원소가 1인 ndarray 생성, 튜플을 이용하여 생성
np.ones((4, 5))
1
2
3
# 3차원 tensor 생성
# 3행 4열의 행렬 2개, 대괄호가 3개 생김
np.ones((2, 3, 4))
1
2
3
# 4차원 생성
# 대괄호가 4개 생김
np.zeros((2, 3, 8, 8))
1
2
# 초기화된 ndarray 생성
np.empty((3, 4))
1
2
# 7로만 이루어진 tensor 생성
np.full((3, 4), 7)
1
2
3
# 5행 5열의 단위 행렬 2차원
# 대각선의 모든 값이 1, 나머지 0
np.eye(5)

np.linspace

1
2
3
# 시작, 끝, 전체 수가 3개가 되도록 나눔
# 원소간의 차이가 동일하게 만듬
np.linspace(1, 10, 3)
1
2
# 숫자 사이 간격이 동일하게
np.linspace(1, 10, 4)
1
2
3
# 4등분, 전체 갯수 5
# 그래프에서 x축에 균등하게 값을 줄 때 사용
np.linspace(1, 10, 5)

reshape

1
2
3
4
5
6
# 1 ~ 15까지 벡터 생성
x = np.arange(1, 16)
print(x)

# 1차원의 shape
x.shape
1
2
# 2차원의 행렬로 형태를 바꿈, 3행 5열로 변경
x.reshape(3, 5)
1
x. reshape(5, 3)
1
2
# 3차원으로 바꿈, 3행 1열이 5개
x.reshape(5, 3, 1)
1
2
3
# 숫자 20개 필요하나 x안에는 15개만 있으므로 대응이 불가능하여 오류 발생
# reshape 하려는 숫자가 원래 존재하는 숫자와 동일한지 확인 필요
x.reshape(5, 4)

random 서브 모듈 이용하여 ndarray 생성히기

  • 랜덤한 값을 생성
  • 보통 train 전 초반에 무작위 값을 생성
1
2
3
# rand 함수, 2행 3열의 랜덤한 값 생성
# 0과 1 사이의 값이 생성
np.random.rand(2, 3)
1
2
# 1차원 벡터
np.random.rand(10)
1
2
# 3차원 tensor, 4행 2열
np.random.rand(3, 4, 2)
1
2
3
4
# 정규분포, n: normal distribution(정규분포)
# 정규분포로 샘플링된 랜덤 ndarrya 생성
# 정규분포이므로 음수값도 생성
np.random.randn(3, 4)

randint 함수

  • 정수에서 샘플링할 때 사용
1
2
3
# 정수에서 샘플링할 때 사용
# 1 ~ 99, 3행 5열 2차원 행렬
np.random.randint(1, 100, size=(3, 5, 2))

seed 함수

  • 랜덤한 값을 동일하게 다시 생성하고자 할 때 사용
  • 고정된 랜덤 값
1
2
3
# 항상 호출 전 동일한 값을 갖고 싶을 때 사용
np.random.seed(100)
np.random.randn(3, 4)

choice

  • 주어진 1차원 ndarray로부터 랜덤으로 샘플링
  • 정수가 주어진 경우, np.arange(해당숫자)로 간주
1
2
3
# 정수 : 100
# size 샘플링을 3, 4로 가져옴
np.random.choice(100, size=(3, 4))
1
2
3
# 중복 허용
x = np.array([1, 2, 3, 1.5, 2.6, 4.9])
np.random.choice(x, size=(2, 2))
1
2
3
# 중복 x
x = np.array([1, 2, 3, 1.5, 2.6, 4.9])
np.random.choice(x, size=(2, 2), replace=False)
1
2
3
4
# 확률분포에 따른 ndarray 생성
# uniform : low에서 high 사이의 값을 가져옴
# normal 등
np.random.uniform(1.0, 3.0, size=(4, 5))
1
2
# 정규분포
np.random.normal(size=(3, 4))
1
2
3
4
# 정규분포 : 평균, 분포, 사이즈 
np.random.normal(size=(3, 4))
# 아래와 동일
np.random.randn(3, 4)
You need to set install_url to use ShareThis. Please set it in _config.yml.

Comments