딥러닝 - 왜 넘파이를 사용하는가?

딥러닝

목록 보기
2/4

배열과 리스트

  • 배열은 메모리 요소들 간에 빈칸 없이 이어진 RAM상에서 단일 블록의 형식으로 표현된다. 인덱싱이 빠륵고 연산의 속도가 매우 빠르다.
  • 리스트는 연속된 메모리 형태가 아닌 RAM상에 흩여져서 배치된다. 메모리 주소에 일정 거리를 더해 각 요소에 접근하는 인덱싱 방법을 사용할 수 없고 각 구성 요소들의 링크를 따라 이동한다. 그래서 리스트의 크기가 커질수록 느리다.

기본 배열

import numpy as np
# 1차원 벡터
a = np.array([1, 2, 3, 4])
a
array(1, 2, 3, 4]
a.size
4
a.shape
(4, )
a.dtype
dtype('int64')

# 2차원 행렬
d = np.array([1, 2, 3], [4, 5, 6], [7, 8, 9])
d.shape
(3,3)
d.size
9
d
array([1, 2, 3],
      [4, 5, 6],
      [7, 8, 9])
  • 기본적으로 array함수를 사용
  • 넘파이 타입: float64, float32, int64, uint64, int32, uint32, uint8

0과 1로 구성된 배열

# 모든 원소를 0으로 초기화시킨 배열
x = np.zeros((2,3,4)) # 3차원
# 모든 원소를 1으로 초기화시킨 배열
y = np.ones((3,3)) 
  • 각 차원별 원소의 개수를 지정한 튜플을 인수로 받는다.

배열 원소에 접근

  • 배열 인덱싱
>> b = np.zeros((3,4), dtype='uint8')
>> b
array([0, 0, 0, 0],
	  [0, 0, 0, 0],
      [0, 0, 0, 0], dtype=uint8)
>> b[0, 1] = 1
>> b[1, 0] = 2
>> b
array([0, 1, 0, 0],
	  [2, 0, 0, 0],
      [0, 0, 0, 0], dtype=uint8)
>> b[1,0]
2
  • 배열 슬라이싱
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> a[1:4]
array([1, 2, 3])

# 여러 차원 중에 하나 선택
>> b.shape
(256, 80, 2)
>> b1 = b[:, :, 0] # shape (256, 80, 1)
>> b2 = b[:, :, 1] # shape (256, 80, 1)
# 역방향 인덱싱
>> a[::-1]
array([9, 8, 7, 6, 5, 4, 3, 2, 1])

참고문헌 - 로널드 크루젤(2022) 실무자를 위한 딥러닝

profile
나 응애👶 개발자, 딥린이👨‍💻, 언어 연구자 👨‍🎓

0개의 댓글