21.07.22_Numpy 기초(2)

우니·2021년 7월 22일
0

넘파이

목록 보기
2/3
post-thumbnail

미용하러 간 날 콩순이는
기분이 무척 안 좋습니다.



안녕하세요.

오늘은 머신러닝 모듈 만드는데 기본적으로 필요한 넘파이의 기본기능을 알아보려고 합니다.

Boolean Indexing

특정 조건을 통해서 주어진 값을 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])

randn 표준정규분포


##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]])
       

1-100까지 3의 배수만 출력하기


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])

1-100까지 3과 5의 배수만 구하기


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])


profile
데이터와 머신러닝을 배우는 일본사업 마케터입니다

0개의 댓글

관련 채용 정보