numpy 패키지의 사용

yoon·2021년 10월 4일
0

(*이 시리즈의 내용은 모두 '인공지능 100점을 위한 파이썬 수학' 서적의 내용을 정리한 것입니다. 사진과 같은 자료들 또한 출처가 위 책임을 밝힙니다.)

  • scipy 패키지를 설치하면 자동으로 numpy까지 설치된다.
    (colab에는 이미 설치가 되어있음.)
  • 파이썬에서는 패키지를 불러올 때 import문을 사용한다.

1. numpy란?

  • 여러 데이터를 담고 사용할 수 있는 리스트나 딕셔너리 같은 자료구조를 활용하면서 수학적 계산을 보다 용이하게 만든 것이다.
  • 배열을 만들 때 numpy 패키지를 import한 다음, array() 함수를 사용한다.
import numpy as np
a = np.array([1, 2, 3, 4]) #1
print(a)
print(type(a))

#1

  • 클래스를 이용한 객체의 모양과 같다.
  • '객체이름.함수이름()'의 모양이다.
  • 마이썬의 거의 모든 것은 객체로 구성.

2. 산술연산

  • 변수에 리스트를 넣으면 그 변수가 리스트를 담을 수 있는 타입이 된다.
  • 오른쪽 a는 리스트가 아닌 numpy에서 제공하는 ndarray이다.
  • numpy의 array는 리스트와 다르다.

리스트의 경우,

a = [1, 2, 3, 4]
b = [1, 2, 3, 4]
print(a+b)
[실행결과]
[1, 2, 3, 4, 1, 2, 3, 4]

리스트 끼리의 덧셈을 하면 끝 부분에 뒤 리스트를 덧붙인다.
반면 numpy 배열은,

a = np.array([1, 2, 3, 4])
b = np.array([1, 2, 3, 4])
print(a+b)
[실행결과]
[2, 4, 6, 8]

numpy의 배열은 요소 별로 산술 연산을 한 후 출력한다.
즉, 리스트와 리스트의 덧셈은 두 개의 리스트의 크기가 달라도 관계없지만, 배열과 배역의 덧셈은 크기(배열 요소의 개수)가 달라지면 오류를 출력한다.

  • 배열의 사칙연산은 크기가 같은 배열에서만 가능하다.
  • 정수, 실수 등 사용할 수 있다.
  • 0.1이 아닌 .1과 같은 형태로도 사용한다.

3. 2차원 배열과 행렬

  • 1차원 배열은 각각의 요소가 한 줄로 늘어선 배열을 말하고, 배열 안에 배열이 들어간 것을 2차원 배열이라고 한다.
np.array([[1, 2], [3, 4]])
  • 3차원 이상의 고차원 배열도 있다.
  • 신경망을 구성할 때 행렬을 사용한다.

4. 행렬의 곱

  • 행렬 요소의 사칙연산 중 요소들의 곱과 행렬의 곱은 의미가 다르다.

    c1 = a1b1+a2b2
    c2 = a1b2+a2b4
    c3 = a3b1+a4b3
    c4 = a3b2+a4b4

  • 행 번호와 열 번호에 해당하는 요소들을 순서대로 곱한 다음 전체를 더해서 결과를 도출한다.

  • 행렬의 곱은 첫 번째 행렬의 열의 크기와 두 번째 행렬의 행의 크기가 같아야 한다.

  • 즉, (2x2)행렬과 (2x3) 행렬은 곱할 수 있지만, (2x3)과 (2x2)행렬을 곱할 수 없다.

  • 행렬의 곱은 numpy의 dot() 함수로 계산할 수 있다.

import numpy as np

A = np.array([[1, 2], [3, 4]])
B = np.array([[1, 2], [3, 4]])
print(np.dot(A, B))
[실행 결과]
[[7 10]
[15 22]]

5. 브로드캐스트

  • 두 행렬 간 요소의 곱을 할 때, 두 번째 행렬의 요소가 첫 번째 행렬과 같지 않고 하나의 값이거나 하나의 행이나 열만 있을 때 나머지를 기존의 값으로 복사해서 사용하는 연산이다.
  • 이 기능을 사용하면 같은 값을 일일이 복사해서 맞춰주지 않더라도 쉽게 프로그램이 가능하다.
import numpy as np

A = np.array([[1, 2], [3, 4]])
B = np.array([[1, 2], [3, 4]])
print(A+B)

B = np.array([[1, 2]])
print(A+B)

B = np.array([[1], [2]])
print(A+B)

B = 2
print(A+B)
[실행 결과]
[[2 4]
 [6 8]]
 
[[2 4]
 [4 6]]
 
[[2 3]
 [5 6]]
 
[[3 4]
 [5 6]]
profile
공부하자

0개의 댓글