데이터를 다루는 데 있어 필수 도구인 numpy의 기본 사용법부터 이를 활용한 데이터 조작 방법까지 알아보고자 한다.
import numpy as np
print(np.array([1, 2, 4.5, 5])) # 모든 요소가 실수형으로 변환
print(np.array([1, 'a', 5.5])) # 문자열이 포함되어 모든 요소가 문자열로 변환
print(np.arange(0, 10) + 2) # 정상 출력 [ 2 3 4 5 6 7 8 9 10 11]
print(np.array(0, 10) + 2) # TypeError 발생
arr = np.arange(2*3*4).reshape(2,3,4)
>>[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
print(arr.sum(0)) # 첫 번째 차원 기준으로 더함
>>[[12 14 16 18]
[20 22 24 26]
[28 30 32 34]]
print(arr.sum(1)) # 두 번째 차원 기준으로 더함
>>[[12 15 18 21]
[48 51 54 57]]
print(arr.sum(2)) # 세 번째 차원 기준으로 더함
>>[[ 6 22 38]
[54 70 86]]
x=np.arange(1,11)
y=np.arange(11,21)
np.add(x,y)
np.abs(x-y)
np.exp2(x)
np.power(3,x)
np.log(x)
np.sum(x) = x.sum()
np.prod(x) = x.prod()
np.argmax(x) # x 원소 중 최댓값의 위치(index)
np.argmin(x) # x 원소 중 최솟값의 위치(index)
np.median(x)
np.percentile(x,80) #상위 20%
print(np.random.random(10)) # 0과 1 사이의 난수
print(np.random.randint(1, 37, (5, 6))) # 1과 36 사이의 정수 난수 (5행 6열)
print(np.random.normal(0, 1, (3, 3)))
# 평균 0, 표준편차 1의 정규분포 난수 (3행 3열)
# np.random.normal(평균, 표준편차, 몇개)
np.random.randn(2,3)
# 평균 0, 표준편차 1의 가우시안 표준정규분포 난수를 matrix array(2,3) 생성
array.reshape(-1,1)
원본 ndarray가 어떤 형태라도 2차원이고, 여러개의 row를 가지되 반드시 1개의 칼럼을 가진 ndarray로 변환
np.r_[a,b] = np.concatenate((a,b), axis=0)
#======= np.r_, np.c_=======
a = [1, 2, 3]
b = [4, 5, 6]
print(np.r_[a,b]) # => [1,2,3,4,5,6]
print(np.r_[[a],[b]] # => [[1,2,3]
# [4,5,6]]
print(np.c_[a,b]) # => [[1,4]
# [2,5]
# [3,6]]
#======= np.concatenate=======
a = np.array([[1, 2], [3, 4]]) # (2, 2)
b = np.array([[5, 6]]) # (1, 2)
np.concatenate((a, b), axis=0) # (3, 2)
>>array([[1, 2],
[3, 4],
[5, 6]])
np.concatenate((a, b.T), axis=1) # (2,3)
>>array([[1, 2, 5],
[3, 4, 6]])
np.concatenate((a, b), axis=None)
>>array([1, 2, 3, 4, 5, 6])
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
>>array([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
new_arr = np.moveaxis(arr, 0, -1) # 첫 번째 축(0)을 마지막 축(-)으로 이동
print(new_arr)
>> array([[[1, 5],
[2, 6]],
[[3, 7],
[4, 8]]])
array = np.expand_dims(df.values, axis=0)
pred = np.random.rand(10)
pred_label = np.where(pred > 0.5, 1, 0)
print(pred_label)
np.digitize(df[col], bins)
np.sort(acc_arr)[::-1] #내림차순으로
np.any(x>8) #하나라도 있으면 True
a1 = np.arange(1, 10, step=0.5)
a2 = np.arange(0.8, 0.9, step=0.5)
np.all(a1==a2) # False (모두 같은지)
np.allclose(a1, a2, rtol=0.2) # False (모두 오차범위 0.2 이내인지)
np.allclose(a1, a2, rtol=0.3) # True (모두 오차범위 0.3 이내인지)