1. numpy 왜 사용해야하나?
NestedList = [[11,12,13],[21,22,23],[31,32,33]]
위와 같은 List가 있을 때, 각 원소에 1을 더하려면 어떻게 해야 할까?
numpy를 모르고 있다면 아래처럼 Looping 처리하면서 각 원소에 1을 더해야 한다.
NestedList = [[11,12,13],[21,22,23],[31,32,33]]
NestedList2 = []
for list in NestedList:
tempList= []
for i in list:
tempList.append(i +1)
NestedList2.append(tempList)
이런 코드량을 견딜 수 없어 Numpy라는 사기 라이브러리 등장.
Array로 만들어서 1만 더하면 됨.
import numpy as np
NestedList = [[11,12,13],[21,22,23],[31,32,33]]
array = np.array(NestedList)
array = array +1
print(array)
물론 이것 외에도 파워풀 기능이 많음
2. numpy 기초1
numpy를 사용하기 위해서는 "import numpy as np" 로 import
numpy 설치는 이전글 참조
1) 배열 만들기
import numpy as np
# 아래 두 구문은 동일 결과
print(np.array([0,1,2,3,4]))
print(np.array(list(range(5))))
# [0 1 2 3 4]
print(np.array([[1, 2],[3, 4]])) # 2차원 배열
# [[1 2]
# [3 4]]
array1 = np.array([1, 2, 3, 4]) # array는 하나의 데이터 타입만 가능
print(array1.dtype) # int32
array2 = np.array([1, 2.0, 3, 4]) # 하나의 데이터 타입으로 다른 데이터의타입을 변경한다. (implicit type conversion)
print(array2.dtype) # float64
array3 = array2.astype(int) # 강제 타입 변경 (explicit type conversion)
print(np.array([1, 2, 3, 4], dtype='float') ) # 데이터타입지정
# [1. 2. 3. 4.]
print(np.zeros(10, dtype=int)) # 0이 들어있는 배열생성
# [0 0 0 0 0 0 0 0 0 0]
print(np.ones( (2,3) , dtype=int)) # 1이들어 있는 배열생성. 2 x 3
# [[1 1 1]
# [1 1 1]]
print(np.empty((2,3))) # 초기값으로 생성. 초기값은 랜덤
# [[ 4.64583300e-308 4.66664552e-308 -2.57703408e+010]
# [-4.70231646e-064 2.26262303e-319 1.42419802e-306]]
print(np.full((2,3),255)) # 초기값을 지정해서 생성
# [[255 255 255]
# [255 255 255]]
print(np.arange(10, 0, -2)) # range 함수와 유사한 배열에서의 함수 : arange
# [10 8 6 4 2]
print(np.linspace(0, 1, 5)) # 두 숫자사이를 나눔
# [0. 0.25 0.5 0.75 1. ]
print(np.random.random((2,3))) # 난수 생성
# [[0.18483957 0.26520271 0.57003289]
# [0.79006366 0.22874932 0.38941764]]
print(np.random.normal(0,1,(2,3))) # 정규분포로부터 무작위 샘플 생성.binomial(이항분포), poisson(포아송분포)도 있음
# [[ 0.44756887 1.12639652 0.12393961]
# [ 0.33699117 -0.85292837 0.63258767]]
print(np.random.randint(0,100,(2,3))) # row와 high 사이의 정수형태의 난수
2) 배열의 속성
array1 = np.full((2,3),255)
print(array1.ndim) # dimension. 2
print(array1.shape) # shape (2,3)
3) 배열의 조작1
배열의 기본 조작은 List와 유사
array1 = np.arange(10) # [0 1 2 3 4 5 6 7 8 9]
print(array1) # [0 1 2 3 4 5 6 7 8 9]
print(array1[0],array1[5],array1[7]) # 0 5 7
print(array1[2:4]) # [2 3]
print(array1[1:]) # [1 2 3 4 5 6 7 8 9]
print(array1[:5]) # [0 1 2 3 4]
print(array1[::2]) # [0 2 4 6 8]
4) 배열의 조작2
배열을 붙이고 자르기
## array 모양변경하기
array1 = np.arange(10)
array2 = array1.reshape((2,5))
print(array2)
# [[0 1 2 3 4]
# [5 6 7 8 9]]
print(array2.shape) # (2, 5)
## array 이어붙이기
array1 = np.array([1,2,3])
array2 = np.array([4,5,6])
print(np.concatenate([array1, array2])) # [1 2 3 4 5 6]
## matrix 이어붙이기 - 세로로 붙이기
array1 = np.array([1,2,3,4]).reshape((2,2))
array2 = np.concatenate([array1,array1], axis = 0)
print(array2)
# [[1 2]
# [3 4]
# [1 2]
# [3 4]]
## matrix 이어붙이기 - 가로로 붙이기
array3 = np.concatenate([array1,array1], axis = 1)
print(array3)
# [[1 2 1 2]
# [3 4 3 4]]
## matrix 가로축으로 나누기
upper , lower = np.split(array2,[3], axis=0) #index 3행기준으로 나누기
print(upper)
# [[1 2]
# [3 4]
# [1 2]]
print(lower)
# [[3 4]]
## matrix 세로축으로 나누기
left , right = np.split(array3,[3], axis=1) #index 3열기준으로 나누기
print(left)
# [[1 2 1]
# [3 4 3]]
print(right)
# [[2]
# [4]]
3. numpy 연산
numpy를 사용하기 위해서는 "import numpy as np" 로 import
1) 기본연산 ( + ,-,*,/ )
array1 = np.array([1,2,3,4,5,6])
print(array1 + 5)
# [ 6 7 8 9 10 11]
print(array1 - 5)
# [-4 -3 -2 -1 0 1]
print(array1 * 5)
# [ 5 10 15 20 25 30]
print(array1 / 5)
# [0.2 0.4 0.6 0.8 1. 1.2]
array2 = array1.reshape((2,3))
print(array2)
# [[1 2 3]
# [4 5 6]]
array3 = array2 + 5
print(array3)
# [[ 6 7 8]
# [ 9 10 11]]
print(array2 + array3)
# [[ 7 9 11]
# [13 15 17]]
2) 브로드캐스팅
shape가 서로 다른 array끼리의 연산은 broadcasting이 발생
단 열이나, 형의 크기가 같아야 연산이 가능
array1 = np.array([1,2,3,4,5,6])
array2 = array1.reshape((2,3))
print(array2)
# [[1 2 3]
# [4 5 6]]
print(array2 + 5)
# [[ 6 7 8]
# [ 9 10 11]]
print(array2 + np.array([1,2,3]))
# [[2 4 6]
# [5 7 9]]
print(array2 + np.array([4,5]).reshape((2,1)))
3) 집계함수
array1 = np.random.normal(0,1,(1000,1000))
print(np.sum(array1) ) # 합산
print(np.min(array1)) # 최소
print(np.max(array1)) # 최대
print(np.mean(array1)) # 평균
print(np.std(array1)) # 표준편차
print(np.var(array1)) # 분산
array1 = np.arange(10).reshape((2,5))
print(array1)
# [[0 1 2 3 4]
# [5 6 7 8 9]]
print(np.sum(array1, axis=0)) # 열 합계
# [ 5 7 9 11 13]
print(np.sum(array1, axis=1)) # 행 합계
# [10 35]
4. 기타
1) 특정 데이터의 갯수 확인하기
array_data = np.array([1,1,2,3,3,3,3,4,5,5])
# 데이터가 3인 element 갯수 구하기 1
print(array_data == 3)
# [False False False True True True True False False False]
print(array_data[array_data == 3])
# [3 3 3 3]
print(len(array_data[array_data == 3]))
# 4
# 데이터가 3인 element 갯수 구하기 2
print(np.count_nonzero(array_data == 3)) # True 1 , False =0
# 4
'Tech-Pyhton' 카테고리의 다른 글
Heap with Python (파이썬으로 힙 자료구조 이용하기) (1) | 2020.08.09 |
---|---|
Pandas 기초 1 (0) | 2020.04.05 |
Numpy 설치하기 (1) | 2019.12.25 |
[Python] Dictionary (0) | 2019.03.27 |
[Python] Map, Filter, Zip (0) | 2019.03.27 |
댓글