[python] numpy
2021. 5. 3. 17:10ㆍPython/문법
Ver. Jupyter Notebook (Anaconda3)
▶ Numpy ndarray 개요
>>> import numpy as np
# ndarray 생성 np.array()
>>> list1 = [1, 2, 3]
>>> print("list1:", list1)
>>> print("list1 type:", type(list1))
list1: [1, 2, 3]
list1 type: <class 'list'>
>>> array1 = np. array(list1)
>>> print("array1:", array1)
>>> print("array1 type:", type(array1))
array1: [1 2 3]
array1 type: <class 'numpy.ndarray'>
# ndarray의 형태(shape)와 차원
## 1차원
>>> array1 = np.array([1,2,3])
## 2차원 ndarray
>>> array2 = np.array([[1,2,3],
>>> [2,3,4]])
## 2차원 ndarray(행이 1개만 있는 2차원)
>>> array3 = np.array([[1,2,3]])
# ndaray 데이터 값 타입
>>> list1 = [1,2,3]
>>> array1 = np.array(list1)
>>> print(type(list1))
>>> print(type(array1))
>>> print(array1, array1.dtype)
<class 'list'>
<class 'numpy.ndarray'>
[1 2 3] int32
>>> list2 = [1, 2, 'test']
>>> array2 = nparray(list2)
>>> print(array2, array2..dtype)
['1' '2' 'test'] <U11
>>> list3 = [1, 2, 3.0]
>>> array3 = np.array(list3)
>>> print(array3, array3.dtype
[1. 2. 3.] float64
# astype()을 통한 타입 변환
>>> array_int = np.array([1, 2, 3])
>>> array_float = array_int.astype('float64') # float32, float64, int32, int64
# ndarray에서 axis 기반의 연산함수 수행
>>> array2 = np.array([[1,2,3],
>>> [2,3,4]])
>>> print("전체 합: ", array2.sum())
>>> print("axis0 합: ", array2.sum(axis=0)) # row 합
>>> print("axis1 합: ", array2.sum(axis=1)) # colum 합
전체 합: 15
axis0 합: [3 5 7]
axis1 합: [6 9]
▶ Numpy ndarray 생성, reshape()
# ndarray를 편리하게 생성하기 - arange, zeros, ones
>>> sequence_array = np.arange(10)
[0 1 2 3 4 5 6 7 8 9]
>>> zero_array = np.zeros((3,2))
[[0. 0.]
[0. 0.]
[0. 0.]]
>>> one_array = np.one((3,2), dtype='int32')
[[1 1]
[1 1]
[1 1]]
# ndarray의 shape를 변경하는 reshape()
# reshape()에 -1 인자값을 부여하여 특정 차원으로 고정된 가변적인 ndarray형태 변환
>>> array1 = np.arange(10)
[0 1 2 3 4 5 6 7 8 9]
>>> array2 = np.reshape(2,5) #= np.reshape(-1,5)
[[0 1 2 3 4]
[5 6 7 8 9]]
>>> array3 = np.reshape(5,2) #= np.reshape(5,-1)
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
>>> array1 = np.arange(5)
[0 1 2 3 4]
# 1차원을 2차원으로 변환
>>> array2d_1 = array1.reshape(-1, 1)
[[0]
[1]
[2]
[3]
[4]]
# 2차원을 1차원으로 변환
>>> array1d = array2d_1.reshape(-1, )
[0 1 2 3 4]
▶ ndarray의 데이터 세트 선택하기 – 인덱싱(Indexing)
● 특정 위치의 단일값 추출
# n번 째 index 값
>>> array1 = np.arange(start=1, stop=10)
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> array1[2]
3
>>> array1[-2]
8
# 요소 수정
>>> array1[0] = 9
>>> array1[8] = 0
array([9 2 3 4 5 6 7 8 0])
>>> array1d = np.arange(start=1, stop=10)
>>> array2d = array1d.reshape(3, 3)
>>> print(array2d)
[[1 2 3]
[4 5 6]
[7 8 9]]
>>> array2d[0, 0]
1
>>> array2d[2, 1]
8
● 슬라이싱
# 연속적인 데이터 가져오기
# 1차원
>>> array1 = np.arange(start=1, stop=10)
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> array1[0:3]
array([1, 2, 3])
>>> array1[3:]
array([4 5 6 7 8 9])
# 2차원
>>> array2d = array1.reshape(3,3)
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> array2d[0:2, 0:2]
array([[1, 2],
[4, 5]])
>>> array2d[1:3, 0:3]
array([[4, 5, 6],
[7, 8, 9]])
● 팬시 인덱싱
# 비연속적인 데이터 가져오기
>>> array1 = np.arange(start=1, stop=10)
>>> array2d = array1.reshape(3,3)
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> array2d[[0, 1], 2]
array([3, 6])
>>> array2d[[0,2], 0:2]
array([[1, 2],
[7, 8]])
>>> list(array2d)
[array([1, 2, 3]), array([4, 5, 6]), array([7, 8, 9])]
>>> array2d.tolist()
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
● 불리언 인덱싱
# True, False로 데이터 가져오기
>>> array1d = np.arange(start=1, stop=10)
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> array1d > 5
array([False, False, False, False, False, True, True, True, True])
>>> array1d[array1d > 5]
array([6, 7, 8, 9])
▶ 행렬의 정렬 - sort()와 argsort()
● 1차원 행렬 정렬
>>> org_array = np.array([3, 1, 9, 5])
>>> org_array
array([3, 1, 9, 5])
# np.sort() : 객제 자체는 변경되지 않음
>>> sort_array1 = np.sort(org_array)
>>> org_array
array([3, 1, 9, 5])
>>> sort_array
array([1, 3, 5, 9])
# ndarray.sort() : 객체 자체를 변경
>>> sort_array2 = org_array.sort()
>>> org_array
array([1, 3, 5, 9])
>>> sort_array2
None
>>> sort_array2 = org_array
array([1, 3, 5, 9])
● 2차원 행렬 정렬
>>> array2d = np.array([[8, 12],
[7, 1 ]])
>>> array2d
array([[ 8, 12],
[ 7, 1]])
>>> sort_array2d_axis0 = np.sort(array2d, axis=0)
>>> sort_array2d_axis0
array([[ 7, 1],
[ 8, 12]])
>>> sort_array2d_axis0 = np.sort(array2d, axis=1)
>>> sort_array2d_axis0
array([[ 8, 12],
[ 1, 7]])
● argsort()
# sort의 인덱스 값을 가져오기
>>> org_array = np.array([ 3, 1, 9, 5])
>>> org_array
array([3, 1, 9, 5])
>>> sort_indices = np.argsort(org_array)
>>> sort_indices
array([1, 0, 3, 2], dtype=int32)
>>> sort_indices_desc = np.argsort(org_array)[::-1]
array([2, 3, 0, 1], dtype=int32)
>>> name_array = np.array(['John', 'Mike', 'Sarah', 'Kate', 'Samuel'])
>>> score_array = np.array([78, 95, 84, 98, 88])
>>> sort_indices = np.argsort(score_array)
>>> sort_indices
array([1, 0, 3, 2], dtype=int32)
>>> name_array_sort = name_array[sort_indices]
>>> score_array_sort = score_array[sort_indices]
>>> print(name_array_sort)
>>> print(score_array_sort)
['John' 'Sarah' 'Samuel' 'Mike' 'Kate']
[78 84 88 95 98]
▶ 선형대수 연산 - 행렬 내적과 전치 해열 구하기
● 내적 행렬
>>> A = np.array([[1, 2, 3],
>>> [4, 5, 6]])
>>> B = np.array([[7, 8],
>>> [9, 10],
>>> [11, 12]])
>>> dot_product = np.dot(A, B)
>>> print('행렬 내적 결과:\n', dot_product)
행렬 내적 결과:
[[ 58 64]
[139 154]]
● 전치 행렬
>>> A = np.array([[1, 2],
>>> [3, 4]])
>>> transpose_mat = np.transpose(A)
>>> print('A의 전치 행렬:\n', transpose_mat)
A의 전치 행렬:
[[1 3]
[2 4]]
'Python > 문법' 카테고리의 다른 글
[Python] 데이터 전처리 (원-핫 인코딩, 표준화, 정규화) (0) | 2021.05.05 |
---|---|
[python] 사이킷런으로 머신러닝 (0) | 2021.05.04 |
[python] crawler (0) | 2021.04.30 |
[Python] 데이터 시각화 (0) | 2021.04.29 |
[python] kaggle, boston marathon (0) | 2021.04.29 |