numpy는 다차원 배열(즉, tensor)을 효율적으로 다루기 위한 python 패키지이다. python에 있는 list 자료형과 비슷하다고 생각할 수 있지만, numpy는 숫자 데이터로 이뤄진 배열에 특화되어있고, 그 값이 커질 수록 list보다 효율적으로(계산 시간 小) 데이터를 다룰 수 있어서 Data Science 분야에서 기본적으로 배운다.
- numpy 설치는 https://qlsenddl-lab.tistory.com/3 참고
- numpy를 import할 때는 다음과 같은 방식으로 한다.
import numpy as np
-> 이는 numpy를 import하는데 np라는 이름으로 앞으로 사용한다는 뜻이다. np말고 다른 이름을 붙여도 python 문법 상 상관없지만 대부분 관용적으로 np라는 이름으로 import한다. (수직선에서 0 오른쪽을 +로 두는 것과 같은 느낌.)
1. numpy 선언
np.array(a): a에 대한 numpy array를 선언한다.
ex>
a = np.array(1.) -> scalar(0차원)
a = np.array([1, 2, 3]) -> vector(1차원)
a = np.array([[1, 2, 3], [4, 5, 6]]) -> matrix(2차원)
a = np.array([[[1, 2, 3], [4, 5, 6]], [[3, 2, 1], [6, 5, 4]]]) -> tensor(3차원)
2. 배열의 크기 확인하기
ndim: 배열의 차원 확인
shape: 배열이 어떤 구조인지 확인(행 수, 열 수 등등)
size: 배열 내의 총 원소의 개수
ex>
a = np.array([[[1, 2, 3], [4, 5, 6]], [[3, 2, 1], [6, 5, 4]]])
print(a.ndim)
>> 3
print(a.shape)
>> (2, 2, 3)
print(a.size)
>> 12
3. 특정 조건의 배열 선언
zeros(a): 모든 원소가 0인 1*a 벡터 생성
zeros((a, b)): 모든 원소가 0인 a*b 행렬 생성
zeros((a, b, c)): 모든 원소가 0인 a*b*c 텐서 생성
ex>
a = np.zeros(10)
print(a)
>> [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
a = np.zeros((2, 5))
print(a)
>> [[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
a = np.zeros((2, 2, 3))
print(a)
>> [[[0. 0. 0.]
[0. 0. 0.]]
[[0. 0. 0.]
[0. 0. 0.]]]
ones(a): 모든 원소가 1인 1*a 벡터 생성
ones((a, b)): 모든 원소가 1인 a*b 행렬 생성
ones((a, b, c)): 모든 원소가 1인 a*b*c 텐서 생성
ex>
a = np.ones(10)
print(a)
>> [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
a = np.ones((2, 5))
print(a)
>> [[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]
full(a, x): 모든 원소가 x인 1*a 벡터 생성
full((a, b), x): 모든 원소가 x인 a*b 행렬 생성
full((a, b, c), x): 모든 원소가 x인 a*b*c 텐서 생성
ex>
a = np.full(2, 5)
print(a)
>> [5 5]
a = np.full((2,5), 5)
print(a)
>> [[5 5 5 5 5]
[5 5 5 5 5]]
arange(x): 0부터 x-1까지 정수를 원소로 갖는 1*x 벡터 생성
arange(x).astype(float): 0부터 x-1까지 정수가 float 자료형인 원소를 갖는 1*x 벡터 생성
arange(x).reshape((a, b, c)): 0부터 x-1까지 정수를 원소로 갖는 a*b*c 텐서 생성 -> arange는 tuple 형태의 변수를 받지 못하므로 이 방법으로 텐서화 가능
ex>
a = np.arange(10)
print(a)
>> [0 1 2 3 4 5 6 7 8 9]
a = np.arange(10).astype(float)
print(a)
>> [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
a = np.arange(10).reshape((2, 5))
print(a)
>> [[0 1 2 3 4]
[5 6 7 8 9]]
random: numpy에서 난수를 생성하는 모듈로 그 멤버 함수로 random, randint, randn 등이 있다.
random.random((a, b, c)): 0과 1사이의 uniform distribution을 따르도록 난수를 발생시켜 a*b*c 텐서 생성
random.randint(x, size = a): 0부터 x-1사이의 정수 난수를 발생시켜 1*a 벡터 생성
random.randint(x, y, size = (a, b, c)): x부터 y-1 사이의 정수 난수를 발생시켜 a*b*c 텐서 생성
random.randn(a): 표준정규분포를 따르도록 난수를 발생시켜 1*a 벡터 생성
random.randn(a, b, c): 표준정규분포를 따르도록 난수를 발생시켜 a*b*c 텐서 생성
ex>
a = np.random.random((2, 2, 3))
print(a)
>> [[[0.02187733 0.49557493 0.39354019]
[0.85821691 0.18544123 0.61908689]]
[[0.87149933 0.74285271 0.68962718]
[0.07353272 0.73564568 0.15481899]]]
a = np.random.randint(5, size = 5)
print(a)
>> [3 0 0 3 1]
a = np.random.randint(2, 7, size = (2, 3))
print(a)
>> [[5 3 2]
[2 5 6]]
a = np.random.randn(3)
print(a)
>> [-1.15008933 -0.60273338 1.10539923]
a = np.random.randn(2, 3)
print(a)
>> [[-2.47314821 0.60510734 0.10481701]
[ 0.12036902 -0.81803328 0.78400282]]
'Python' 카테고리의 다른 글
numpy 다루기 3 (0) | 2020.10.30 |
---|---|
numpy 다루기 2 (0) | 2020.10.23 |
Python str 자료형(문자열) 멤버 함수 정리 (0) | 2020.10.22 |
Python list 자료형 멤버 함수 정리 (0) | 2020.10.22 |
Python 개발 환경 구축1: Anaconda 설치하기(Window) (0) | 2020.09.23 |