4 분 소요

지난 포스팅에서 numpy의 ndarray가 무엇인지 간단하게 알아보았습니다. 아직 감이 오지 않으시겠죠. 조금 더 진행 해 보도록 하겠습니다. 이번에는 ndarray를 생성하는 여러 가지 방법을 알아보겠습니다. 지난 번에 list를 이용 하여 ndarray를 생성하였습니다. ndarray는 list외에도 다양한 방법으로 생성할 수 있습니다.

np.arange

np.arange를 이용하여 ndarray를 생성해 보겠습니다. 어디선가 많이 보신 것 같죠? 맞습니다. arange는 range와 비슷합니다. range는 list를 생성히고 arange는 ndarray를 생성합니다.

import numpy as np

arr = np.arange(10)
print(arr)
  • np.arange(10): 0부터 9까지의 ndarray를 생성합니다.
[0 1 2 3 4 5 6 7 8 9]

np.zeros

np.zeros는 0으로 채워진 ndarray를 생성합니다.

import numpy as np

arr = np.zeros(10)
print(arr)
  • np.zeros(10): 0으로 채워진 10개의 ndarray를 생성합니다.
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

shape(모양)을 지정하여 생성

import numpy as np

arr = np.zeros((3, 4))
print(arr)
  • np.zeros((3, 4)): 0으로 채워진 3x4의 ndarray를 생성합니다.
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

np.ones

np.ones는 1로 채워진 ndarray를 생성합니다.

import numpy as np

arr = np.ones(10)
print(arr)
  • np.ones(10): 1로 채워진 10개의 ndarray를 생성합니다.
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]

모양을 지정하여 생성

import numpy as np

arr = np.ones((3, 4))
print(arr)
  • np.ones((3, 4)): 1로 채워진 3x4의 ndarray를 생성합니다.
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]

np.random

np.random은 랜덤한 값으로 채워진 ndarray를 생성합니다. random은 생각보다 많이 사용합니다. 예를 들어 random 값으로 채워진 ndarray를 생성하여 머신러닝의 데이터로 사용하기도 합니다. 그 외에도 프로그래밍을 하다 보면 정해진 값이 아닌 random 값이 필요할 때가 있습니다. np.random을 알아보기 전에 균등부포와 정규분포를 알아보겠습니다.

균등분포(uniform distribution)와 정규분포(normal distribution)

먼저 균등분포와 정규분포에 대해 알아보겠습니다.

  • 균등분포는 모든 값이 나올 확률이 동일합니다. 모든 값이 균등한 확률로 일어날 것이라고 예상될 때 사용합니다. 예를 들어 주사위를 던져서 나오는 값은 1부터 6까지의 값이 나올 확률이 동일합니다. 미래의 결과값을 경험으로 알 수 없을 때 사용합니다.
  • 정규분포는 평균을 중심으로 값이 모여있는 분포입니다. 모든 값이 나올 확률이 동일하지 않습니다. 평균을 중심으로 값이 모여있는 분포입니다. 예를 들어 한 학급의 성적은 정규분포를 따릅니다. 표준편차는 평균을 기준으로 값이 퍼져 있는 정도를 나타냅니다. 현실 세계에서는 정규분포를 따르는 경우가 많습니다. 미래의 결과값을 경험으로 알 수 있을 때 사용합니다.

np.random.rand

np.random.rand는 균등분포(0과 1사이)를 따르는 랜덤한 값으로 채워진 ndarray를 생성합니다.

import numpy as np

arr = np.random.rand(10)
print(arr)
  • np.random.rand(10): 균등분포를 따르는 랜덤한 값으로 채워진 10개의 ndarray를 생성합니다.
[0.81483179 0.38642987 0.96337695 0.77482397 0.33684728 0.57664842 0.60956433 0.93551999 0.24402638 0.99773951]

모양을 지정하여 생성

import numpy as np

arr = np.random.rand(3, 4)
print(arr)
  • np.random.rand(3, 4): 균등분포를 따르는 랜덤한 값으로 채워진 3x4의 ndarray를 생성합니다.
[[0.81483179 0.38642987 0.96337695 0.77482397]
 [0.33684728 0.57664842 0.60956433 0.93551999]
 [0.24402638 0.99773951 0.81483179 0.38642987]]

np.random.randn

np.random.randn은 정규분포(평균이 0이고 표준편차가 1 -> 대체로 -1과 1사이의 값)를 따르는 랜덤한 값으로 채워진 ndarray를 생성합니다.

import numpy as np

arr = np.random.randn(10)
print(arr)
  • np.random.randn(10): 정규분포를 따르는 랜덤한 값으로
  • 채워진 10개의 ndarray를 생성합니다.
[-0.16595599  0.44044174  0.89489355  0.80616842  0.05257897 -0.46830699 -0.16595599  0.44044174  0.89489355  0.80616842]

모양을 지정하여 생성

import numpy as np

arr = np.random.randn(3, 4)
print(arr)
  • np.random.randn(3, 4): 정규분포를 따르는 랜덤한 값으로 채워진 3x4의 ndarray를 생성합니다.
[[-0.16595599  0.44044174  0.89489355  0.80616842]
 [ 0.05257897 -0.46830699 -0.16595599  0.44044174]
 [ 0.89489355  0.80616842  0.05257897 -0.46830699]]

np.random.randint

np.random.randint는 정수의 균등분포를 따르는 랜덤한 값으로 채워진 ndarray를 생성합니다.

import numpy as np

arr = np.random.randint(10, size=10)
print(arr)
  • np.random.randint(10, size=10): 0부터 9까지의 정수의 균등분포를 따르는 랜덤한 값으로 채워진 10개의 ndarray를 생성합니다.
[7 6 3 1 3 5 2 7 2 9]

옵션을 추가하여 생성

import numpy as np

arr = np.random.randint(1, 30, size=(3, 4))
print(arr)
  • np.random.randint(1, 30, size=(3, 4)): 1부터 29까지의 정수의 균등분포를 따르는 랜덤한 값으로 채워진 3x4의 ndarray를 생성합니다.
  • numpy.random.randint(low, high=None, size=None, dtype='I')
    • low: 최소값(정수), 파라미터가 1개 일 경우 0 ~ low 까지
    • high: 최대값(정수), 선택 파라미터
    • size: shape(모양)
    • dtype: 데이터 타입
[[ 8  1  7  1]
 [ 2  2  2  2]
 [ 1  2  1  1]]

np.random.seed

np.random.seed는 랜덤한 값을 생성할 때 마다 같은 값이 나오도록 설정합니다. seed값은 어떤 값이든 상관 없습니다.

import numpy as np

for i in range(5):
    arr = np.random.randint(10, size=10)
    print(arr)

print()

for i in range(5):
    np.random.seed(0)
    arr = np.random.randint(10, size=10)
    print(arr)
  • np.random.seed(0): 랜덤한 값을 생성할 때 마다 같은 값이 나오도록 설정합니다.
[6 0 3 4 9 7 7 9 8 2]
[1 9 5 9 1 6 8 9 9 3]
[4 6 3 2 6 3 7 2 1 2]
[4 0 1 6 9 6 0 8 5 9]
[5 3 6 5 1 5 1 4 7 6]

[5 0 3 3 7 9 3 5 2 4]
[5 0 3 3 7 9 3 5 2 4]
[5 0 3 3 7 9 3 5 2 4]
[5 0 3 3 7 9 3 5 2 4]
[5 0 3 3 7 9 3 5 2 4]

np.linspace

linspace는 지정한 범위의 ndarray를 생성합니다. 알아 두면 유용합니다. 그래프를 그릴 때 x축의 범위를 지정할 때 많이 사용합니다.

import numpy as np

arr = np.linspace(0, 100, 5)
print(arr)
  • np.linspace(0, 100, 5): 0부터 100까지 5개의 ndarray를 생성합니다.
[  0.  25.  50.  75. 100.]

그 외

np.full

full은 지정한 값으로 채워진 ndarray를 생성합니다.

import numpy as np

arr = np.full(10, 5)
print(arr)
  • np.full(10, 5): 5로 채워진 10개의 ndarray를 생성합니다.
[5 5 5 5 5 5 5 5 5 5]

np.eye

eye는 단위 행렬을 생성합니다.

import numpy as np

arr = np.eye(3)
print(arr)
  • np.eye(3): 3x3의 단위 행렬을 생성합니다.
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

np.empty

empty는 초기화 되지 않은 ndarray를 생성합니다.

import numpy as np

arr = np.empty(10)
print(arr)
  • np.empty(10): 초기화 되지 않은 10개의 ndarray를 생성합니다.
[0.00000000e+000 2.44769159e-307 9.79088179e-307 1.29061685e-306 1.24608618e-306 1.37962456e-306 6.45306730e-307 0.00000000e+000 0.00000000e+000 0.00000000e+000]
  • 초기화를 하지 않았기 때문에 메모리 상에 있는 값이 그대로 출력됩니다. 어떤 값이 출력될지 모릅니다.

해시태그: #python #numpy #ndarray #arange #zeros #ones #random #rand #randn #randint #seed #linspace #full #eye #empty

댓글남기기