본문 바로가기
머신러닝

Numpy에 대해

by 제리의 세계 2023. 4. 30.

안녕하세요! 제리입니다.

 

기술 블로그를 쓸 때 어떤 것을 먼저 써야할 지, 내가 지금 하고 있는 것을 먼저 써야할 지

고민이 참 많았습니다.

 

복습도 할 겸, 자세히 다시 리마인드하는 느낌으로 하나씩 작성해보려고 합니다!

 

 

 


Numpy란?

파이썬에서 배열을 사용하기 위한 표준 패키지, 수치 해석용 패키지

벡터 / 행렬 사용하는 선형대수 계산에 주로 이용

 

왜 알아야할까?

처음에 저도 사용할 일이 없어서 그렇게 중요하지 않다고 생각했습니다.

numpy보다 이후의 pandas가 데이터 분석에 있어서 더 많이 쓰이고 관련 라이브러리가 많기 때문이죠.

그런데 딥러닝을 배울 때 이 부분이 중요합니다!

그렇기에 처음을 잘 다잡고 가시는 것을 추천합니다~~~

 

배열 : 같은 타입의 변수들로 이뤄진 유한집합

인덱스 : 배역에서의 위치 나타내는 숫자 (항상 0부터 시작, 양의 정수만 가짐)

행렬 : 수 또는 다항식을 직사각형 모양으로 배열

행렬의 표현

 

이 정도면 벌써 반절을 하신 것입니다!

물론 이를 어떻게 코드를 쳐야할지 알아야겠죠?????

 

# numpy 라이브러리 가져오기
# 주로 np로 줄여서 사용
import numpy as np

# 리스트 생성
>>> my_list = [1,2,3]
>>> my_list
[1, 2, 3]

# 배열로 변환
>>> a = np.array(my_list)
>>> a
array([1, 2, 3])

# 인덱스
>>> a[0] # 0번째부터 시작하므로 처음에 위치한 1을 출력
1
>>> a[-1] # -1 인덱스는 마지막 것을 출력
3

# 행렬 표현
>>> my_matrix = [[1,2,3],[4,5,6],[7,8,9]]
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 2차원 행렬로 표현
>>> b = np.array(my_matrix)
>>> b
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
       
# 행렬 인덱스
>>> b[0,0] # 첫 번째 행의 첫번째열 출력
1
>>> b[0,-1] # 첫번째 행의 마지막 열
3

# 배열 슬라이싱 (복수 개를 접근)
>>> b[0,:] # 첫번째 행의 열 전체
array([1, 2, 3])

>>> b[1,1:] # 두번째 행의 두번째 열부터 전체
array([5, 6])

# 크기에 따른, 0인 배열 생성
>>> c = np.zeros(3)
>>> c
array([0., 0., 0.])

# 크기에 따른, 1인 행렬 생성
>>> d = np.ones((3,2))
>>> d
array([[1., 1.],
       [1., 1.],
       [1., 1.]])

# 크기에 따른, 배열 생성
>>> e = np.empty((2,3))
>>> e
array([[1., 1., 1.],
       [1., 1., 1.]])

# 특정 수열 만들 때 사용
>>> np.arange(4)
array([0, 1, 2, 3])

# 배수 형태의 수열도 가능
>>> np.arange(2,10,4)
array([2, 6])

# 선형 구간 지정 구간 수만큼 분할
>>> np.linspace(0,100,5)
array([  0.,  25.,  50.,  75., 100.])

# 배열 내부 데이터 보존한 채로 형태 변경
>>> a = np.array([0,1,2,3])
>>> b = a.reshape(2,2)
>>> b
array([[0, 1],
       [2, 3]])

# 1차원 배열 형태로 변경
>>> b.flatten()
array([0, 1, 2, 3])

>>> aa = np.array([[1,2,3],[4,5,6]])
>>> aa
array([[1, 2, 3],
       [4, 5, 6]])

# 행렬의 사칙연산      
>>> aa+aa
array([[ 2,  4,  6],
       [ 8, 10, 12]])
       
>>> aa-aa
array([[0, 0, 0],
       [0, 0, 0]])
       
>>> aa*aa
array([[ 1,  4,  9],
       [16, 25, 36]])
       
>>> aa/aa
array([[1., 1., 1.],
       [1., 1., 1.]])
       
       
>>> bb = aa.reshape(3,2)
>>> bb
array([[1, 2],
       [3, 4],
       [5, 6]])

# 행렬의 곱 (행렬a의 열과 b의 행 수가 같아야함)
>>> np.dot(aa,bb)
array([[22, 28],
       [49, 64]])

무엇보다도 선형대수의 개념이 어느정도 들어가져있기에

코드만 돌리시지 말고 왜 이 결과가 나왔을 지 한번 공부해보는 것도 좋습니다!

 

특히 행렬의 곱과 슬라이싱은 매우 많이 쓰이기에!!!!!!!!!!!!!

처음부터 제대로 하면 좋습니다~(후회 중)

 

제가 공부했던 강의에서의 파일입니다! (유데미 강의)

00-NumPy-Arrays.ipynb
0.02MB
01-NumPy-Indexing-and-Selection.ipynb
0.01MB
02-NumPy-Operations.ipynb
0.01MB

 

아래 예제 문제 풀어보면서 실력을 키워보는 것은 어떨까요?????

03-NumPy-Exercises.ipynb
0.02MB

꼭 다 풀어보시고 정답을 보시기 추천드립니다!

04-NumPy-Exercises-Solutions.ipynb
0.02MB