numpy
NumPy 퀵스타터
- 설치방법 : pip install numpy
- 용도 : python에서 벡터,행렬 등 수치 연산 수행하는 선형대수 라이브러리
참고로 백준 온라인 저지에서는 사용 못합니다. 외부 라이브러리이기 때문입니다.
배열 생성
import numpy as np
a = np.array([2,3,4])
[2 3 4]
(출력) a → array([2, 3, 4])
(출력) a.dtype → dtype('int64')
b = np.array([1.2, 3.5, 5.1])
(출력) b.dtype → dtype('float64')
b = np.array([(1.5,2,3), (4,5,6)])
(출력) b
array([[1.5, 2. , 3. ],
[4. , 5. , 6. ]])
c = np.array( [ [1,2], [3,4] ], dtype=complex )
(출력) c
array([[1.+0.j, 2.+0.j],
[3.+0.j, 4.+0.j]])
arrange() : 범위 안의 숫자를 모두 포함한 배열 생성 (기본dtype : int32)
reshape(x,y) : [x][y]형태로 배열 재조립
array.flatten() : 1차원 배열로 변환
np.arange(start=0, end, step=1) : end값 포함x
import numpy as np
a = np.arange(10)
[0 1 2 3 4 5 6 7 8 9]
b = np.arange(0, 1, 0.1)
[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
c = a.reshape(2,5)
[[0 1 2 3 4]
[5 6 7 8 9]]
d = a.reshape(10)
[0 1 2 3 4 5 6 7 8 9]
e = a.reshape(10,)
[0 1 2 3 4 5 6 7 8 9]
f = a.reshape(-1,2) : -1 뒤에 오는 값은 row값 지정
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
a = np.arange(10).reshape(2,5)
[[0 1 2 3 4]
[5 6 7 8 9]]
b = a.flatten()
[0 1 2 3 4 5 6 7 8 9]
zeros() : 0으로 채워진 배열 생성 (기본dtype : float64)
np.zeros(shape, dtype, order)
np.zeros(3)
[0. 0. 0.]
np.zeros((3, 4))
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
ones() : 1로 채워진 배열 생성 (기본dtype : float64)
np.ones(shape, dtype, order)
np.ones((2,3,4), dtype=np.int16)
[[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]]
empty() : 초기화 되지 않는 쓰레기값으로 채워진 배열 생성
np.empty(3)
[6.95310922e-310 6.95310922e-310 3.49699467e-317]
something_like() : 만들어진 배열을 특정 값으로 채워넣을때 사용
- np.zeros_like(matrix) : 0으로 채워버린다
- np.ones_like(matrix) : 1로 채워버린다
- np.empty_like(matrix) : 쓰레기 값으로 채워버린다
배열이 너무 크면 ... 으로 표현됨
아래와 같이 해주면 전부 출력됨
np.set_printoptions(threshold=sys.maxsize)
평균
numpy.mean(x)
중앙값 : 정렬했을때 정중앙에 있는 값
np.median(x) : 출력값은 float 형
리스트에 음수가 있으면 안됨 !!!!!!!!!!!!!!!
x = np.array([1,2,3])
np.median(x)
2.0
최빈값 : 가장 많이 등장하는 값
- 자료의 값이 모두 같거나 모두 다르면 최빈값은 없음.
- 자료의 값이 모두 다를 때, 도수가 가장 큰 값이 1개 이상 있으면 그 값은 모두 최빈값
1. numpy 의 bincount와 argmax 함수 사용
리스트에 음수가 있으면 안됨 !!!!!!!!!!!!!!!
import numpy as np
aa = np.array([1,2,3,1,2,3,3,4]) : 0부터~가장큰수 까지 몇번 등장했는지 단순 나열
bb = np.bincount(aa)
[0 2 2 3 1]
cc = bb.argmax()
3
혹은
bb = np.bincount([1,2,3,1,2,3,3,4,9,10,10])
[0 2 2 3 1 0 0 0 0 1 2]
cc = bb.argmax()
3
2. collections.Counter 사용
리스트에 음수가 있으면 안됨 !!!!!!!!!!!!!!!
import collections
a = [1,2,3,1,2,3,3,4]
b = collections.Counter(a) : 등장 횟수 많은것 부터 dict{값:등장횟수} 로 돌려줌
Counter({3: 3, 1: 2, 2: 2, 4: 1})
c = b.most_common() : 리스트[튜플()]로 변환하여 반환
[(3, 3), (1, 2), (2, 2), (4, 1)]
그럼 음수값이 포함된 리스트에서 최빈값을 어떻게 구할까?
음수를 양수로 바꿔서 풀면 됩니다.
ex) 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
→ 모든 값에 4000을 더하면 적어도 0보다는 커진다.
import numpy np (백준에서는 지원안됨)
입력 = [-1,-1,-2,-2] → 각 요소에 4000씩 더해서 아래와 같이 양수로 만듬
array = [3999, 3999, 3998, 3998]
print(collections.Counter(array).most_common()[0][0]-4000)
→ -1
print(np.bincount(array).argmax()-4000)
→ -2
왜 이런 결과가 나올까?
bincount()는 0부터 가장큰 값 까지 등장횟수 순서대로 나열
argmax() 함수는 array에서 가장 큰 값 들고오는데 여러개 있으면 가장 처음 만나는 것 들고옴
그래서 3999이 아니라 3998 값을 가져옴.
3998-4000 = -2
'Python > 라이브러리' 카테고리의 다른 글
파이썬 (python) 라이브러리 - Pandas 판다스 (0) | 2021.03.22 |
---|---|
파이썬 (python) 라이브러리 - finpie (1) | 2021.03.19 |
파이썬 (python) 라이브러리 - yahoo_fin (0) | 2021.03.18 |
파이썬 (python) 라이브러리 - openpyxl, xlrd (excel 다루기) (0) | 2021.03.09 |
파이썬 (python) 라이브러리 - re (정규표현식) (1) | 2021.03.09 |