개발공부

[Python] Numpy (넘파이) 어레이 만드는 방법(0, 1, 정수, 실수, 랜덤) 본문

Python/Numpy

[Python] Numpy (넘파이) 어레이 만드는 방법(0, 1, 정수, 실수, 랜덤)

mscha 2022. 4. 28. 17:35

NUMPY

 NumPy는 다차원 배열을 처리할 수 있는 선형대수학(Linear Algebra) 라이브러리입니다. 
- 다음이 실행이 안되면 아나콘다프롬프트에서 conda install numpy 를 실행하여 설치합니다.

 

 

넘파이는 아래와 같이 선언하여 사용할 수 있다.

import numpy as np

 

넘파이 어레이 생성

np.array()

>>> a = [1, 2, 3, 4, 5]
>>> b = np.array(a)
>>> b
array([1, 2, 3, 4, 5])
>>> b = np.array([[1,2],[3,4]])
>>> b
array([[1, 2],
       [3, 4]])
>>> b.size   #(총 데이터의 개수)
4
>>> len(b)
2
>>> b.shape  # (행의 개수, 열의 개수)
(2, 2)
>>> b.dtype  # 데이터 타입
dtype('int32')
>>> b.ndim   #차원의 수

 

np.zeros()

 - 내부를 0으로 채운 넘파이 어레이 생성

# 3행 4열을 가진 0으로만 되어있는 행렬 만들기 ( 2차원 배열)

>>> K = np.zeros( (3, 4) )
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
       
       
       
# 데이터가 7개가 모두 0인 1차원 배열 만들기

>>> np.zeros(7)
array([0., 0., 0., 0., 0., 0., 0.])

 

np.ones()

- 내부를 0으로 채운 넘파이 어레이 생성

# 모든 데이터를 1로하여, 1이 8개짜리 넘파이 배열을 만들기
>>> np.ones(8)
array([1., 1., 1., 1., 1., 1., 1., 1.])

# 3행 5열짜리 1로 채워진 행렬을 만들기
>>> np.ones((3, 5))
array([[1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.]])

 

np.full()

- 특정 값으로 채워진 넘파이 어레이 생성

# 6으로만 채워진 10개짜리 1차원 배열을 만들기
>>> np.full(10, 6)
array([6, 6, 6, 6, 6, 6, 6, 6, 6, 6])

# 6으로만 채워진 2행 3열짜리 행렬을 만들기
>>> np.full((2, 3), 6)
array([[6, 6, 6],
       [6, 6, 6]])

 

np.arange(start, stop, step)

 - range()로 만들어진 숫자 리스트를 넘파이 어레이로 생성

 - 정수의 배열을 얻고자 할때 사용

# 0부터 9까지의 숫자로 채워진 1차원  배열
>>> np.arange(9+1)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# # 4부터 12까지의 정수로 채워진 1차원 배열
>>> np.arange(4, 12+1)
array([ 4,  5,  6,  7,  8,  9, 10, 11, 12])

# 3부터 20까지의 정수중, 홀수로만 채워진 1차원 배열
>>> np.arange(3, 20+1, 2)
array([ 3,  5,  7,  9, 11, 13, 15, 17, 19])

 

 

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)

 - 실수의 배열을 얻고자 할때 사용

 - start부터 stop까지 num의 갯수만큼 랜덤한 실수로 채워진 배열을 생성

# 0부터 25까지의 실수 10개로 이루어진 넘파이 어레이 생성
>>> np.linspace(0, 25, 10)
array([ 0.        ,  2.77777778,  5.55555556,  8.33333333, 11.11111111,
       13.88888889, 16.66666667, 19.44444444, 22.22222222, 25.        ])
       
# endpoint = False 면 기준이 되는 양끝값을 제외한 실수로 채워진다
>>> np.linspace(0, 25, 10, endpoint = False )
array([ 0. ,  2.5,  5. ,  7.5, 10. , 12.5, 15. , 17.5, 20. , 22.5])

 

np.random.random()

 - 0 - 1 사이의 임의의 값으로 채워진 배열을 생성한다.

#총 8개의 0~1 사이의 수로 이루어진 1차원 배열 생성
>>> np.random.random(8)
array([0.96453049, 0.87545978, 0.29065312, 0.13664617, 0.62877984,
       0.40001004, 0.07078882, 0.93963641])
       
       
# (3, 4)의 형을 가진 0~1 사이의 수로 이루어진 배열 생성
>>> np.random.random((3, 4))
array([[0.91090846, 0.92943032, 0.82455363, 0.04541904],
       [0.97921768, 0.40729191, 0.73913105, 0.23626899],
       [0.76432667, 0.36933886, 0.71950602, 0.81522966]])

 

np.random.randint(start, stop, size = shape)

 - start와 stop사이의 정수 값으로 이루어졌고, size 형을 가진 배열 생성

# size를 정의하지 않으면 랜덤정수값 1개를 생성
>>> np.random.randint(1, 6)
4

# 1-6 범위의 랜덤한 정수 11개를 가진 1차원 배열 생성
>>> np.random.randint(1, 6, 11)
array([5, 3, 2, 4, 4, 5, 4, 1, 3, 4, 3])

# 1-6 범위의 랜덤한 정수로 이루어진 (3, 4) 의 형을 가진 배열 생성
>>> np.random.randint(1, 6, (3, 4))
array([[2, 2, 2, 4],
       [4, 5, 1, 5],
       [2, 5, 5, 4]])

 

np.random.normal(mean, standard deviation, size=shape)

 - 정규분포를 만족하는 랜덤값으로 채우기

# 평균 170, 표준편자 10의 정규분포를 만족하는 값 1개 생성
>>> np.random.normal( 170, 10)
166.46290322335383

# 평균 170, 표준편자 10의 정규분포를 만족하는 값 4개로 이루어진 1차원 배열 생성
>>> np.random.normal( 170, 10, 4)
array([156.01385665, 170.22139075, 164.56378747, 167.66453062])

# 평균 170, 표준편자 10의 정규분포를 만족하는 값으로 이루어진 (2,3)모양 배열 생성
>>> np.random.normal( 170, 10, (2,3))
array([[181.68883625, 187.75348056, 159.06727022],
       [170.63801411, 147.85398391, 152.64217368]])