일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- DP
- 비트마스크
- 헥사고날 아키텍처
- disjoint set
- pandas
- dataframe
- 스프링
- 알고리즘
- JPA
- java
- 이펙티브 자바
- spring security
- 백준
- 다익스트라
- 문자열
- Redis
- 자바
- 포트앤어댑터 아키텍처
- springboot
- 데이터 flow
- 위상정렬
- 세그먼트 트리
- UML
- series
- equals
- BFS
- dfs
- ddd
- docker
- 파이썬
- Today
- Total
코딩못하는사람
numpy모듈(2) 실습 본문
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의 더하기 연산과 같은 어레이를 반환한다
실습 코드
'머신러닝,마이닝' 카테고리의 다른 글
pandas 모듈 (2) (0) | 2020.10.20 |
---|---|
pandas 모듈 Series,DataFrame (0) | 2020.10.19 |
Perceptron 신경망 (1) | 2020.09.18 |
Numpy모듈 (1) | 2020.09.17 |