반응형
Numpy 패키지란?
- 과학 계산과 데이터 다루기를 용이하게 해주는 패키지
- 고차원 배열을 객체로 제공하여 이와 관련된 메소드를 제공한다
- Python에서 C이나 Fortran 에 근접한 연산능력을 보여주기 때문에 유용하다
- 연산의 벡터화를 제공하기 때문에 코딩하기에도 편리하다
- 리스트와는 다르게 배열의 크기가 정해져있어, 크기 변경시 새 객체가 생성된다.
- 원소 자료형이 모두 일치되어야 한다
- 리스트 자료형 이상의 수많은 수학 연산을 기본으로 제공한다.
- 다른 패키지에서도 Numpy 배열을 기초 자료형으로 사용하곤 한다.
Numpy 배열 생성 : 기존 객체 이용
import numpy as np # numpy 패키지를 np라는 이름으로 가져온다
np.__version__ # 버전 확인가능
arr1 = np.array([1,3,5,7,9]) # 리스트로 numpy 배열 생성
arr2 = np.array((1,3,5,7,9)) # 튜플로 numpy 배열 생성
type(arr1) # numpy.ndarray 출력 numpy.ndarray는 일종의 행렬 자료구조이다
- 리스트로 사용하든 튜플로 사용하든 똑같이 numpy.ndarray 자료구조의 numpy 배열을 생성한다.
arr3 = arr1 # 동일 객체
arr4 = arr1.copy() # 다른 객체
- numpy 배열 객체도 객체이기 때문에 arr3 = arr1과 같이 깊은 복사를 하면 id까지 동일한 완전히 같은 객체가 된다.
- 따라서 복사가 필요할 경우 copy함수 등의 활용으로 깊은 복사를 해줄 필요가 있다.
a = np.array([[1, 2, 3,], [4, 5, 6], [7, 8, 9]])
a[2][1] # 8
a[2,1] # 8
a[[0,2]] # array([[1, 2, 3], [7, 8, 9]])
- numpy 배열도 슬라이싱이 가능하다.
- 다만 특이한 점은 a[2,1]와 같은 방식으로도 요소에 바로 접근할 수 있다는 것이다.
- a[[0,2]]는 특정 ROW만을 리턴한다.
arr = np.array([[1, 2, 3,], [4, 5, 6], [7, 8, 9]])
len(arr) # 3
arr.size # 9, numpy 배열인 경우에만 가능
arr.shape # (3,3), numpy 배열인 경우에만 가능
arr.ndim # 2, 차원 수
arr.reshape(1,9) # (1,9) 형태로 numpy 배열의 형태를 바꿔준다.
- size는 단순 길이 이상으로 해당 numpy 배열이 품고있는 요소 개수를 리턴한다. 다차원 배열 형태일 경우에도 총 요소의 개수를 리턴한다. (len은 다차원 배열이어도 한차원만 체크 가능하다)
- shape는 해당 numpy 배열의 형태를 출력한다
- ndim은 해당 numpy 배열의 차원수를 출력한다.
- reshape는 numpy 배열의 형태를 바꿔준다.
Numpy 배열 생성 : arange
np.arange(10) # 0~9.
np.arange(10,20) # 10~19.
np.arange(10, 20, 3) # 10~19, step = 3.
- arange 함수는 일정 범위, 패턴의 numpy 배열을 생성해준다.
a = np.arange(10)
b = a.reshape(2,5)
c = a.reshape(5,-1)
a[0] = -999
- 이 경우 a에 적용시킨 -999가 b,c에도 그대로 적용된다.
- 객체는 다르지만(id는 다름) 서로 메모리 공간을 공유하기 때문이다.
- 만약 reshape에 '-1'을 파라미터로 넣을 경우 ‘-1'위치의 차원은 원래 배열의 길이와 남은 차원으로 부터 추정한다
Numpy 배열 생성 : linspace
np.linspace(0, 10, 5) # 0과 10 사이 5개의 요소를 가지는 array 생성
arr = np.linspace(0, 10, retstep=True) # 0과 10 사이의 50개(default)의 요소를 가지는 array 생성 및 간격 함께 출력
- linspace 함수는 일정범위에 일정한 간격으로 요소를 가지는 numpy 배열을 생성한다.
- 위의 경우 0~10 사이의 5개의 요소를 가지는 numpy array를 생성한다. (array([0.0, 2.5, 5.0, 7.5, 10.0]))
- 요소 개수값의 default는 50이며, retstep 옵션을 주면 각 요소 사이의 간격값도 함께 출력된다.
- 아래는 np.linspace(0, 10, retstep=True)의 결과로 생성된 numpy 배열이다.
(array([ 0. , 0.20408163, 0.40816327, 0.6122449 , 0.81632653,
1.02040816, 1.2244898 , 1.42857143, 1.63265306, 1.83673469,
2.04081633, 2.24489796, 2.44897959, 2.65306122, 2.85714286,
3.06122449, 3.26530612, 3.46938776, 3.67346939, 3.87755102,
4.08163265, 4.28571429, 4.48979592, 4.69387755, 4.89795918,
5.10204082, 5.30612245, 5.51020408, 5.71428571, 5.91836735,
6.12244898, 6.32653061, 6.53061224, 6.73469388, 6.93877551,
7.14285714, 7.34693878, 7.55102041, 7.75510204, 7.95918367,
8.16326531, 8.36734694, 8.57142857, 8.7755102 , 8.97959184,
9.18367347, 9.3877551 , 9.59183673, 9.79591837, 10. ]),
0.20408163265306123)
Numpy 배열 생성 : zeros
np.zeros(10)
np.zeros((3,4))
np.zeros(5, dtype ='int64') # 특정 type 부여
np.zeros((3,4)).astype('float32')
- 0으로 이루어진 numpy 배열을 생성한다.
- 참고로 1로 이루어진 numpy 배열을 생성하는 ones 함수도 존재한다.
- 2차원(혹은 그 이상)의 형태도 생성이 가능하다.
- dtype을 명시해 데이터 정해서 부여할 수도 있는데, 기본 type은 float64이다.
- astype은 자료형을 변경하는 함수이다. (단, 객체자체가 변하는 것은 아니고 변경된 객체를 리턴해준다.)
- 자료형에 대한 설명 : https://eunguru.tistory.com/216
Numpy 배열의 자료형 통일
arr1 = np.array([111, 2.3, True, False, False]) # array([111. , 2.3, 1. , 0. , 0. ])
arr2 = np.array([111, 2.3, 'python', 'abc']) # array(['111', '2.3', 'python', 'abc'], dtype='<U32')
arr3 = np.array([111, True, 'abc']) # array(['111', 'True', 'abc'], dtype='<U11')
- 문자열, 숫자, 불린은 한 numpy배열에 들어가면 하나로 통일된다.
- 문자열이 제일 힘이 세고, 그 다음으로 숫자 불린 순서라고 생각하면 되겠다.
- dtype의 <U32나 <U11은 문자열 타입의 한 종류인 정도만 알아두자
반응형
'🛠 기타 > Data & AI' 카테고리의 다른 글
[파이썬] Numpy 배열의 참조 (reshape를 통해 생성한 배열과 값을 공유하는 이유?) (0) | 2020.07.09 |
---|---|
[파이썬] Numpy Fancy Indexing (0) | 2020.07.09 |
딥러닝 기초 (0) | 2020.06.13 |
머신러닝 기초수학2 - 미분 (0) | 2020.06.09 |
머신러닝 기초수학1 - 통계학 (0) | 2020.06.03 |