Numpy의 근간은 ndarray 객체이다.
리스트는 C의 배열과 다르게 각 요소들의 주소가 연속적이지 않다. 반면 Numpy의 ndarray는 각 요소들의 주소가 연속적이다. 이는 계산의 속도를 향상해 느린 연산 속도를 갖는 파이썬의 단점을 없애준다.
1. ndarray의 생성
1) array
import numpy as np
matA = [[1, 2, 3],[4, 5, 6], [7, 8, 9]]
matB = np.array(matA) #리스트로 생성
matC = np.array(((1, 2, 3), (4, 5, 6), (7, 8, 9))) #튜플로 생성
print(type(matA))
print(type(matB))
print(type(matC))
결과를 보면 알 수 있듯이 리스트와 튜플 모두 ndarray 객체를 반환한다. 이 때, 튜플을 입력해도 ndarray 객체를 반환하므로 반환된 객체의 요소는 변경될 수 있다
2) arange
arange는 array의 범위를 지정해 생성할 수 있다
순서대로 start, end, step이고 end는 포함되지 않는다
한 개의 매개 변수만 입력하면 start=0, step=1, 입력된 매개변수는 end값이 된다
import numpy as np
matD = np.arange(10)
matE = np.arange(0, 20, 2)
print('matD: ', matD)
print('matE: ', matE)
3) zeros
zeros는 리스트나 튜플을 입력받고 해당하는 행과 열을 갖는 array를 반환한다. 이때 array의 요소는 모두 0이다.
import numpy as np
matF = np.zeros((3,4))
print(matF)
2. shape
중첩 리스트를 사용할 경우, 리스트는 링크가 각 셀을 결합하고 있는 형태로 저장된다. 하지만 ndarray의 경우는 동적으로 객체의 구성을 변경할 수 없다.
따라서 ndarray의 경우는 배열의 크기를 바꿀 때 전체 요소를 삭제하고 다시 재생성해야 하는 단점이 있다.
1) shape
shape를 사용하면 해당 배열의 행과 열을 튜플로 반환한다
import numpy as np
matG = np.zeros((3,2))
print(matG.shape)
2) reshape
- reshape 메서드를 사용하면 배열의 크기를 변환할 수 있다
- 튜플을 입력값으로 받는다
- 튜플 값 중 하나를 -1로 넣으면 나머지 하나는 자동으로 채워진다
- 요소의 개수가 정수로 나누어 떨어지지 않으면 ValueError가 발생한다
import numpy as np
matH = np.arange(10)
print('before: ', matH)
matH = matH.reshape((2, 5))
print('After: ', matH)
reshape만 사용하면 객체의 요소는 변경되지 않고 size가 변경된 ndarray만 반환된다. 객체의 요소를 반환하려면 대입 연산자를 사용해야 한다
matH = matH.reshape((5, -1))
print('After: ', matH)
입력되는 튜플 값 중 하나를 -1로 넣으면 나머지 하나는 자동으로 입력된다
'DataScience' 카테고리의 다른 글
가우스 적분 (0) | 2020.08.26 |
---|---|
[Numpy] 뷰 (0) | 2020.08.26 |
[Numpy] 배열과 행렬 (0) | 2020.08.26 |
아나콘다 라이브러리 설치 (0) | 2020.08.12 |
지수분포의 정의와 평균, 분산 (0) | 2020.08.08 |