-
Python: numpy 라이브러리 정리(indexing, slicing, 정규분포 난수)Python 2021. 5. 30. 21:13
데이터 처리 시 리스트 간의 다양한 연산이 필요하지만
파이썬 기본 리스트는 이러한 기능이 부족하며 연산 속도도 빠르지 않다.
넘파이는 파이썬에서 수치 데이터를 다루는 가장 기본적이고 강력한 패키지로써
pandas, scikit-learn, tensorflow등이 넘파이 위에서 동작한다.
넘파이는 ndarray를 사용하는데 이는 C 언어에 기반한 배열 구조로써
메모리를 적게 차지하며 속도가 빠르다.
또한 고급 연산자와 풍부한 함수를 제공한다.
1. 다차원 배열(ndarray)의 속성
# ndarray를 이용한 연산 import numpy as np a = np.array(range(1, 11)) b = np.array(range(10, 20)) print(a) print(b) print(a+b) print(a-b) # 객체의 형태 print(a.shape) # 객체의 차원 print(a.ndim) # 객체의 내부 자료형 print(a.dtype) # 객체의 내부 자료형이 차지하는 메모리 크기(bytes) print(a.itemsize) # 객체의 항목 수 print(a.size)
[ 1 2 3 4 5 6 7 8 9 10] [10 11 12 13 14 15 16 17 18 19] [11 13 15 17 19 21 23 25 27 29] [-9 -9 -9 -9 -9 -9 -9 -9 -9 -9] (10,) 1 int32 4 10
2. 논리적 인덱싱
# 논리적 인덱싱 import numpy as np scores = np.array([84, 41, 70, 30, 100, 66, 30, 90, 91]) print(scores) # 70점 이상 찾기 print(scores[scores >= 70])
[ 84 41 70 30 100 66 30 90 91] [ 84 70 100 90 91]
3. 2차원 배열
import numpy as np array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] np_array = np.array(array) print("2차원 배열") print(np_array) print("2차원 배열 인덱싱") print(np_array[2][2]) print(np_array[2, 2]) # 단 np_array[0:2, 0:2] 와 np_array[0:2][0:2]는 다르다. print("2차원 배열 요소 변경") np_array[2, 2] = 9.1234 # 실패 -> 정수만 저장 print(np_array) print("2차원 배열 일부 추출") print(np_array[1][0:2]) print("2차원 배열에서 하나의 행 지정") print(np_array[2]) print("2차원 배열 논리적인 인덱싱 - 짝수") print(np_array[np_array%2==0]) print("2차원 배열 논리적인 인덱싱 - 세번째 열") print(np_array[:, 2])
2차원 배열 [[1 2 3] [4 5 6] [7 8 9]] 2차원 배열 인덱싱 9 9 2차원 배열 요소 변경 [[1 2 3] [4 5 6] [7 8 9]] 2차원 배열 일부 추출 [4 5] 2차원 배열에서 하나의 행 지정 [7 8 9] 2차원 배열 논리적인 인덱싱 - 짝수 [2 4 6 8] 2차원 배열 논리적인 인덱싱 - 세번째 열 [3 6 9]
4. numpy 함수 사용하기(arange, linespace, reshape, flatten)
import numpy as np print("arange 사용하기") # array + range # np.arange([시작], [끝], [간격]) np_array = np.arange(1, 30, 5) print(np_array) print("linespace 사용하기") # 시작값부터 끝값까지 균일한 간격으로 지정된 개수만큼 배열 생성 ls = np.linspace(0, 10, 10) print(ls) print('reshape 사용하기') np_array = np.arange(1, 30, 3) # (2, 5) 크기로 배열을 reshape한다. rs = np_array.reshape(2, 5) print(rs) # 인수로 -1 전달시 데이터 개수에 맞춰서 자동으로 배열 형태 결정 print(rs.reshape(5, -1)) # 데이터 갯수가 맞지 않으면 에러가 발생한다. print('flatten 사용하기') # 2차원 이상의 배열을 1차원 배열로 생성 np_array = np.arange(1, 30, 3).reshape(5, -1) print(np_array) print(np_array.flatten())
arange 사용하기 [ 1 6 11 16 21 26] linespace 사용하기 [ 0. 1.11111111 2.22222222 3.33333333 4.44444444 5.55555556 6.66666667 7.77777778 8.88888889 10. ] reshape 사용하기 [[ 1 4 7 10 13] [16 19 22 25 28]] [[ 1 4] [ 7 10] [13 16] [19 22] [25 28]] flatten 사용하기 [[ 1 4] [ 7 10] [13 16] [19 22] [25 28]] [ 1 4 7 10 13 16 19 22 25 28]
5. numpy 난수 생성하기
print("난수 생성") # 난수의 seed를 먼저 생성 np.random.seed(100) # 의사 난수 생성 print(np.random.rand(5)) # 난수로 이루어진 이차원 배열(3x5)생성 print(np.random.rand(3, 5)) # 30에서 40 사이의 (2, 2) 난수 배열 생성 print(np.random.rand(2, 2)*10 + 30) print("정수 난수 생성") # 1에서 6까지의 정수 난수 중 10개 출력 print(np.random.randint(1, 7, size=10)) # 3x4 배열의 1에서 30까지의 정수 난수 print(np.random.randint(1, 31, size=(3, 4)))
난수 생성 [0.54340494 0.27836939 0.42451759 0.84477613 0.00471886] [[0.12156912 0.67074908 0.82585276 0.13670659 0.57509333] [0.89132195 0.20920212 0.18532822 0.10837689 0.21969749] [0.97862378 0.81168315 0.17194101 0.81622475 0.27407375]] [[34.31704184 39.4002982 ] [38.17649379 33.3611195 ]] 정수 난수 생성 [4 1 3 2 2 4 3 6 4 1] [[15 18 17 16] [ 8 14 7 13] [19 1 25 3]]
6. numpy 정규분포 난수 생성하기
print("정규 분포 난수 생성") # 정규분포를 갖는 난수를 생성한다. print(np.random.randn(5)) # 평균이 10이고 표준편차가 2인 정규분포 (3x4) 난수 생성 mean = 10 sigma = 2 randoms = 10+sigma*np.random.randn(3, 4) print(randoms) # 평균과 중간값 계산하기 print("평균 계산하기") print(np.mean(randoms)) print("중간값 계산하기") print(np.median(randoms))
정규 분포 난수 생성 [ 0.18451869 0.9370822 0.73100034 1.36155613 -0.32623806] [[10.11135203 10.44479922 7.11356601 8.48729539] [11.63290802 11.50088952 9.08810615 12.37924454] [ 6.61876635 7.2872019 7.53513097 8.91112168]] 평균 계산하기 9.259198480812097 중간값 계산하기 8.999613910859534
반응형'Python' 카테고리의 다른 글
Python: BeautifulSoup 라이브러리 정리(find, find_all, 태그, 클래스, id, 속성) (0) 2021.06.02 Python: matplot 라이브러리 정리 (선, 막대, 산포도, 파이, 히스토그램) (0) 2021.05.31 Python: Pillow 라이브러리 정리(이미지 편집, 이미지 필터, tkinter활용) (0) 2021.05.02 Python: Window programming Tkinter 라이브러리 정리 2 (0) 2021.04.16 Python: Window programming Tkinter 라이브러리 정리 1 (0) 2021.04.09