미용하러 간 날 콩순이는
기분이 무척 안 좋습니다.
안녕하세요.
오늘은 머신러닝 모듈 만드는데 기본적으로 필요한 넘파이의 기본기능을 알아보려고 합니다.
특정 조건을 통해서 주어진 값을 True, False로 값을 구분합니다.
그 다음 True에만 해당되는 값 또는 False에만 해당하는 값만 보여주는 인덱싱 입니다.
import numpy as np
ar1 = np.arange(1,10)
print(ar1)
#결과
[1 2 3 4 5 6 7 8 9]
## 5보다 큰 값을 True / False로 출력하기
print(ar1 > 5)
#결과
[False False False False False True True True True]
## 리스트 형태로 묶어서 True에 해당하는 값만 출력하기
ar2 = ar1[ar1 > 5]
print(ar2)
#결과
[6 7 8 9]
## 1-14의 배열을 만들어라
ar_1 = np.arange(1,15)
print(ar_1)
#결과
[ 1 2 3 4 5 6 7 8 9 10 11 12 13]
ar_2 = ar1 [ar_1 / 2 > 5]
print(ar_2)
#결과
[11 12 13]
## 1개 이상의 True값이 있는지 확인
# any 메서드를 사용 >> 하나 이상 값이 True인지 검사
bools = np.array([False, Fasle, True, True])
bools.any()
#결과
True
## 모든 값이 True 또는 False인지 확인하기
## all메서드를 사용
bools.all()
#결과
False
indexes를 사용합니다.
x = np.array([5,6,7,8])
ar3 = ar1[x]
print(ar3)
#결과
array([6, 7, 8, 9])
##names라는 이름이 들어간 배열 만들기
names = np.array(['Bob', 'Joe','Will', 'Bob','Joe','Will,'Joe','Joe'])
#randn 표준정규분포
data = np.random.randn(7,4)
print(names)
#결과
['Bob' 'Joe' 'Will' 'Bob' 'Will' 'Joe' 'Joe']
print(data)
#결과
[[-2.65122973 0.14139548 -0.62415457 -0.48546309]
[-1.50784333 0.25708502 0.21428742 1.03441764]
[ 0.53221731 0.13306656 -0.49836289 -1.62096759]
[-0.49765601 -0.30814889 -1.30718322 1.03201561]
[-0.94965156 -0.18772937 1.82906906 0.25382264]
[-0.31080956 1.88524138 0.8814878 -1.67237639]
[ 1.67405029 -0.66681038 0.73960779 -0.63111344]]
#이름이 'Bob'인 값만 True로 나오게 하기
names = 'Bob'
#결과
array([ True, False, False, True, False, False, False])
# 'Bob'이라는 이름만 출력하기
# 'Bob'이라는 이름은 1행, 4행이만 있어서 1행과 4행에만 있는 표준정규분포 값만 나온다.
data[names == 'Bob]
#결과
array([[-2.65122973, 0.14139548, -0.62415457, -0.48546309],
[-0.49765601, -0.30814889, -1.30718322, 1.03201561]])
## 'Bob'이라는 이름 중 2번째 인덱스 이전 값만 뽑기
data[names == 'Bob', 2:]
#결과
array([[-0.62415457, -0.48546309],
[-1.30718322, 1.03201561]])
## 'Bob'이 아닌 표준정규분포 데이터를 출력하기
data[name != 'Bob']
#결과
array([[[ 0.2846608 , 1.13162521, -0.79670886, 0.03223693],
[-0.02999574, -0.37822654, -0.14248789, -0.89572667],
[ 0.41747362, -0.05393259, -0.27758745, -0.19213647],
[-1.84727508, -0.39534926, -0.51557597, 1.04359061],
[ 0.17615049, -0.43233544, 1.40690683, -0.10603855],
[-0.43503309, -0.75235357, -0.10998179, 0.16678625],
[ 1.43572908, -0.07263152, -0.80674209, -0.35350538]]])
## 이름이 'Bob' 이거나 'Will'에 해당하는 것을 출력해라
mask = (names == 'Bob') | (names == 'Will)
data[mask]
#결과
array([[-0.3911165 , -0.07760451, 0.30361212, -1.40856341],
[-1.14350241, -0.7763836 , -0.5079049 , 2.48087386],
[-0.24903127, 0.49556056, 0.5545127 , -0.98871631],
[-0.42930986, -1.10527691, 0.65268802, 0.52901838]])
#음수를 모두 0으로 바꾸기
data[data < 0] = 0
print(data)
array([[0. , 0. , 0.30361212, 0. ],
[1.86485726, 0. , 0.3258819 , 0.18190656],
[0. , 0. , 0. , 2.48087386],
[0. , 0.49556056, 0.5545127 , 0. ],
[0. , 0. , 0.65268802, 0.52901838],
[0. , 0. , 0. , 1.037797 ],
[0. , 0. , 0. , 1.61968924]])
#이름이 'Joe'가 아닌 위치에 7을 대입하기
data[names != 'Joe'] = 7
#결과
array([[7. , 7. , 7. , 7. ],
[1.86485726, 0. , 0.3258819 , 0.18190656],
[7. , 7. , 7. , 7. ],
[7. , 7. , 7. , 7. ],
[7. , 7. , 7. , 7. ],
[0. , 0. , 0. , 1.037797 ],
[0. , 0. , 0. , 1.61968924]])
전치는 행과 열의 위치를 바꾸는 것을 의미합니다
배열이름.T transpose()를 사용합니다.
#먼저 배열을 만듭니다.
ar = np.random.arange(15).reshape(3,5)
#결과
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
#만든 배열을 전치합니다
ar_t = ar.T
#결과
array([3, 3, 2, 2, 1, 1])
np.random.seed(0) 를 사용합니다.
np.random.seed(0)
arr1 = np.random.randn(0)
arr1
#결과
array([[ 1.76405235, 0.40015721, 0.97873798],
[ 2.2408932 , 1.86755799, -0.97727788],
[ 0.95008842, -0.15135721, -0.10321885],
[ 0.4105985 , 0.14404357, 1.45427351],
[ 0.76103773, 0.12167502, 0.44386323],
[ 0.33367433, 1.49407907, -0.20515826]])
x = np.random.randint(1,101)
y = x[x % 3 ==0]
print(y)
#결과
array([ 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51,
54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99])
a = random.randint(1,101)
b = a[(a % 3 == 0) & (a % 5 ==0)]
print(b)
#결과
array([15, 30, 45, 60, 75, 90])
round를 사용합니다
ar = np.random.randn(5,4)
##ar의 평균 구하기
ar.mean()
#결과
0.06318043000333648
##ar합계구하고 소수점 4번째 자리 까지 반올림하기
ar1 = ar.sum().round(4)
#결과
0.0632
cumsum()을 사용합니다.
## 1차원 배열에서 누적합계 구하기
ar = np.arange(1,9)
ar.cumsum()
#결과
[1 2 3 4 5 6 7 8]
## 2차원 배열에서 누적합계 구하기
## 누적합계를 행쪽으로 계산할지, 열쪽으로 계산할지 정해야합니다.
## axis를 사용해서 방향을 정해줍니다
## 행방향 : axis = 0 / 열방향 : axis = 1
ar = np.arange(9).reshape(3,3)
#행방향으로 계산
ar.cumsum(axis=0)
#열방향으로 계산
ar.cumsum(axis=1)
ar = np.random.randn(10)
#양수인 원소의 개수 구하기
(ar > 0).sum()
#아래도 가능
len(ar[ar>0])