글을 시작하며
부스트캠프에서 수업을 한 Numpy부분을 정리하고 공부하기 위해서 작성합니당
계속 하는데 잘 까먹는다...하면서 글을 시작!😂
Numpy란?
- Numerical Python
- 파이썬의 고성능 과학 계산용 패키지
- Matrix와 Vector와 같은 Array 연산의 사실상의 표준
- 한글로 넘파이로 주로 통칭
- 일반 List에 비해 빠르고, 메모리 효율적
- 반복문 없이 데이터 배열에 대한 처리를 지원함
- 선형대수와 관련된 다양한 기능을 제공함
- c, c++, 포트란 등의 언어와 통합가능
ndarray
import numpy as np
test_array = np.array([1, 4, 5, 8], float)
print(test_array)
type(test_array[3])
# [1. 4. 5. 8.]
# numpy.float64
- numpy는 np.array 함수를 활용 배열을 생성함. → ndarray(객체)
- numpy는 하나의 데이터 type만 배열에 넣을 수 있음.
- List와 가장 큰 차이점 → dynamic typing not supported
- C의 Array를 사용하여 배열을 생성함.
- numpy array는 차례대로 값이 저장되는 반면 파이썬의 List는 값의 주소값을 List에 넣어서 2번 들어가는 방식이다.(-5 ~ 256은 고정 주소값)
- 타입도 일정하기 때문에 메모리도 효율적이다.
test_array = np.array([1, 4, 5, "8"], float) # String Type의 데이터를 입력해도
print(test_array)
print(type(test_array[3])) # Float Type으로 자동 형변환을 실시
print(test_array.dtype) # Array(배열) 전체의 데이터 Type을 반환함
print(test_array.shape) # Array(배열) 의 shape을 반환함
print(test_array.nbytes) # ndarry object의 메모리 크기를 반환함.
# [1. 4. 5. 8.]
# <class 'numpy.float64'>
# float64
# (4,)
# 32 -> float64는 8bytes 이므로 4 * 8 = 32
numpy Rank
Hadling Shape
reshape : Array의 shape의 크기를 변경함, element의 갯수는 동일
- reshape에서 (-1, n) 하면 n으로 지정하고 나머지 사이즈에 맞춰서 넣어진다.
- ex : (2,4)를 reshape(-1,2) 하면 reshape(4,2)와 같다.
flatten : 다차원 array를 1차원 array로 변환.
ravel : 다차원 array를 1차원 array로 변환.
a = np.array([[1,2,3,4],[5,6,7,8]])
a1 = a.flatten()
a2 = a.ravel()
a3 = a.reshape(-1)
# array([1, 2, 3, 4, 5, 6, 7, 8])
# array([1, 2, 3, 4, 5, 6, 7, 8])
# array([1, 2, 3, 4, 5, 6, 7, 8])
a[0][0] = 100
a
# array([[100, 2, 3, 4],
# [ 5, 6, 7, 8]])
a1
# array([1, 2, 3, 4, 5, 6, 7, 8])
a2
# array([100, 2, 3, 4, 5, 6, 7, 8])
a3
# array([100, 2, 3, 4, 5, 6, 7, 8])
위에서 보이는 것처럼 reshape과 flatten, reval로 1차원으로 만들 수 있습니다. 각각의 함수에 차이점이 있다면 아래와 같습니다.
numpy.ravel() | numpy.reshape() | numpy.ndarray.flatten() |
1차원배열(contiguous flattened array)반환 | 데이터 변경 없이 형상만 변경하여 반환 | 1차원배열 복사본을 반환 |
원본 값 변경시 같이 변함 | 원본 값 변경시 같이 변함 | 원본 값 변경시 변하지 않음. |
Indexing & Slicing
index : List와 달리 이차원 배열에서 [0,0]표기법을 제공함.
- matrix 일 경우 앞은 row, 뒤는 column을 의미함.
slicing : List와 달리 행과 열 부분을 나눠서 slicing이 가능함.
- matrix의 부분 집합을 추출할 때 유용함.
a = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]], int)
a[:,2:] # 전체 Row의 2열 이상
a[1,1:3] # 1 Row의 1열 ~ 2열
a[1:3] # 1 Row ~ 2Row의 전체
Create Function
arange : array의 범위를 지정하여, 값의 list를 생성하는 명령어
np.array(30) # List의 range와 같음.
np.arange(0,5,0.5) # (시작, 끝, step
np.arrange(30).reshpae(5,6)
zeros : 0으로 가득찬 ndarray 생성 np.zeros(shape, dtype, order)
ones : 1로 가득찬 ndarray 생성
empty : shape만 주어지고 비어있는 ndarray 생성 (memory initialization이 되지 않음)
something_list : 기존 ndarray의 shape 크기 만큼 1, 0 또는 empty array를 반환
identity : 단위행렬(i행렬)을 생성함.
eye : 대각선이 1인 행렬, k값의 시작 index의 변경이 가능.
diag : 대각 행렬의 값을 추출함.
random sampling : 데이터 분포에 따른 sampling으로 array를 생성 (시작, 끝, 개수)
'인공지능 공부 > 이론 및 파이썬' 카테고리의 다른 글
[이론 및 파이썬] Numpy(2) (0) | 2021.02.07 |
---|---|
[이론 및 파이썬] pandas, numpy 공부 (0) | 2021.02.07 |
[이론 및 파이썬] 확률 및 통계 용어 정리(1) (0) | 2021.01.31 |
[이론 및 파이썬] L1 Norm과 L2 Norm (0) | 2021.01.30 |
[이론 및 파이썬] 정규 표현식 (0) | 2021.01.30 |