코딩못하는사람

numpy모듈(2) 실습 본문

머신러닝,마이닝

numpy모듈(2) 실습

공부절대안함 2020. 9. 28. 17:52

4주차 과제하며 배우고 익힌것.

 

1.np.random

np.random에서 크게 3가지가 있다.

np.random.randint

[최저값, 최대값)의 범위에서 임의의 정수를 만든다.

Score = np.random.randint(100, size=(10, 4))   (0~99점까지 숫자를 10행 4열 짜리 사이즈로 만들어라)

 

np.random.rand(size)

만들어진 난수 어레이는 주어진 값에 의해 결정되며, [0, 1) 범위에서 균일한 분포를 갖는다.

np.random.rand(5)

>>>[0.41626628 0.40269923 0.80574938 0.67014962 0.47630372]

np.random.rand(2, 3)

>>>[[0.83739956 0.62462355 0.66043459] [0.96358531 0.23121274 0.68940178]]

 

np.random.randn

표준정규분포(standard normal distribution)를 갖는 난수를 반환한다.

np.random.randn(2, 3)

>>>[[ 0.87354043 0.03783873 0.77153503] [-0.35765934 2.11477207 1.28474164]]

 

randint가 가장 많이 쓸 것 같다.

2.np.where(조건)

np.where은 numpy의 조건문이다. 조건에 맞으면 맞는 성분의 인덱스를 반환한다.

a = np.array([2, 5, 1, 3, 0])

b = np.where(a < 3)

print(b)  >>>(array([0, 2, 4], dtype=int64),)

print(a[b]) >>>[2 1 0]

 

np.where(조건,A,B)의 형태로 만들게 되면 조건이 맞을 때는 앞에 A를 수행하고 틀릴 때는 B를 수행한다.

따라서 실습 1번을 풀 때 B에 where을 재귀적으로 넣었다.

 

3.np.mean,np.sum

np.mean과 np.sum에는 axis를 정해주어야 한다는 특징이 있다.정해주지 않으면 모든 원소를 계산한다

axis는 축을 말하며 열을 기준으로 모든행을 하고싶다면 axis=0, 행을 기준으로 모든 열을 하고싶다면 axis=1을 해주면 된다

 

 

 

 

 

 

 

 

4.reshape

자신이 원하는 배열의 모양으로 배열을 바꿀 수 있다.

a = np.arange(12)

b = a.reshape(3, 4)

c = a.reshape(2, 3, 2)

b>>>[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]]

c>>>[[[ 0 1] [ 2 3] [ 4 5]] [[ 6 7] [ 8 9] [10 11]]]

shape, ndim 속성을 이용해서 어레이의 형태와 차원을 확인할 수 있습니다.

b.shape, b.ndim>>>(3, 4) 2

c.shape, c.ndim>>>(2, 3, 2) 3

 

5.numpy의 배열 나타내기

가장 헷갈린 것이다.

arr = np.arange(32).reshape((8, 4))>>8*4형식으로 0~31 생성했다고 하자 (순서대로 4개씩 8줄)

1.print(arr[[1, 5, 7, 2], [0, 3, 1, 2]])
2.print(arr[[1,5,7,2]])
3.print(arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]])
4.print(arr[[1, 5, 7, 2]][[0, 3, 1, 2]])

이 4개를 비교해보자 가장 중요한것은 쉼표로 나누어지느냐 곱셈처럼 붙어있느냐 이다.

 

1번은 쉼표로 중간이 나누어져있다 이것은 왼쪽은 행 오른쪽은 열을 나타낸다는 것이다.따라서

arr[[1, 5, 7, 2], [0, 3, 1, 2]] == arr[[1,0],[5,3],[7,1],[2,2]]와 같다

>>>[4,23,29,10]

 

2번은 쉼표없이 arr[[1,5,7,2]]만 있다. 이것은 그냥 1,5,7,2행을 차례대로 나타낸다는 뜻이다.

[[ 4  5  6  7]  [20 21 22 23]   [28 29 30 31]   [ 8  9 10 11]]

 

3번은 가운데가 곱셈처럼 괄호로 만났다.왼쪽 수행한결과를 바탕으로 오른쪽으로 이어진다고 생각하자

arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]] 먼저 arr[[1,5,7,2]]를 수행하면 2번의 결과가 나올것이다.

그 2번결과를 바탕으로 오른쪽을 가는 것이다. 오른쪽은 [:, [0, 3, 1, 2]인데 모든행을 나타내는 :와 [0,3,1,2]가 나왔으므로 모든행에서 0,3,1,2번 열 순서대로 나열하겠다는 뜻이다.

따라서 [[ 4  7  5  6]  [20 23 21 22]  [28 31 29 30]  [ 8 11  9 10]]이 될것이다 

 

4번은 2번의 결과에서 0,3,1,2번 순서로 행을 불러온 결과일 것이다.

[[ 4  5  6  7]  [ 8  9 10 11]  [20 21 22 23]  [28 29 30 31]]

 

6.concatenate

 

 

 

numpy의 array와 python의 list는 +연산에 대해서 다르게 작동한다

Python 리스트가 두 리스트를 연결하는 반면,

NumPy의 어레이에 대해 더하기 연산은 각 요소의 값을 서로 더한다

따라서 두 어레이를 연결하려면 concatenate를 활용해야 한다.

 

 

 

 

 

 

 

 

 

axis=0으로 지정하면, 첫번째 축을 따라 어레이를 연결하고,

axis=1로 지정하면, 두번째 축을 따라 어레이를 연결합니다.

axis를 지정하지않으면 python의 더하기 연산과 같은 어레이를 반환한다

 

 

 

 

 

 

 

 

실습 코드

codetorial.net/numpy/functions/index.html에서 공부하였습니다

'머신러닝,마이닝' 카테고리의 다른 글

pandas 모듈 (2)  (0) 2020.10.20
pandas 모듈 Series,DataFrame  (0) 2020.10.19
Perceptron 신경망  (1) 2020.09.18
Numpy모듈  (1) 2020.09.17
Comments