본문 바로가기

Deep Learning

[Deep Learning] 220729 학습일기

 

 

밑바닥부터 시작하는 딥러닝 - YES24

직접 구현하고 움직여보며 익히는 가장 쉬운 딥러닝 입문서 이 책은 라이브러리나 프레임워크에 의존하지 않고, 딥러닝의 핵심을 ‘밑바닥부터’ 직접 만들어보며 즐겁게 배울 수 있는 본격 딥

www.yes24.com

 

1.

그저께 인덱스가 n1,n2,n3인 원소를 얻을 때 아래와 같은 방법으로 구해야 해서 기존의 파이썬식 원소 구하는 방법과 달라 어렵다고 생각했다.

import numpy as np
A = np.array([[1,2], [10,21], [12,60]])
Af = A.flatten()
print(Af)
print(Af[np.array([0,2,4])])

<출력값>

[ 1  2 10 21 12 60]
[ 1 10 12]

 

그런데 이건 인덱스가 n1,n2,n3인 원소를 구하는 방법이다.

즉, 인덱스로 구하고자 하는 원소가 여러개인 경우다.

 

만약 하나의 인덱스로 원소를 구하고자 한다면, 예를 들어 인덱스가 1인 원소(여기서는 2)만 구하고자 한다면 기존 파이썬에서 인덱스로 원소 찾는 방법과 동일하다.

import numpy as np
A = np.array([[1,2], [10,21], [12,60]])
Af = A.flatten()
print(Af)
print(Af[np.array([0,2,4])])
print(Af[0])

<출력값>

[ 1  2 10 21 12 60]
[ 1 10 12]
1

 

약간 이렇게도 이해할 수 있을 듯 하다.

Af라는 평탄화된 배열 속에서 [0,2,4]를 numpy 배열화 한 것을 통째로 인덱스 찾아버리는 것이다.

np.array([0,2,4])를 하면 [0 2 4]라는 넘파이 배열이 생긴다.

인덱스가 [0 2 4]인 원소를 한꺼번에 찾아버리는 것이다!

그렇게 생각하면 한번에 여러개의 원소를 인덱스로 찾을 때 왜

Af[np.array([0,2,4])

이렇게 쓰는지 이해가 된다.

 

 

2.

import numpy as np
A = np.array([[1,2], [10,21], [12,60]])
Af = A.flatten()
print(Af)
print(Af>15)

<출력값>

[ 1  2 10 21 12 60]
[False False False  True False  True]

 

독특하다 독특해...

원소들 타입은 모두 boolean이다.

넘파이 배열에 부등호 연산을 수행하면 배열의 원소 각각에 부등호 연산을 수행한 bool

 

 

아나콘다 인터프리터에서는 이것을 더 잘 확인할 수 있을 줄 알았으나..

아쉽게도 최근 아나콘다 인터프리터 버전에서는 dtype이 함께 안 뜨는 것 같다.

 

 

3.

import numpy as np
A = np.array([[1,2], [10,21], [12,60]])
Af = A.flatten()
print(Af)
print(Af>15)
print(Af[Af>15])

<출력값>

[ 1  2 10 21 12 60]
[False False False  True False  True]
[21 60]

Af> 15 는 bool 배열이다.

bool 배열을 사용해 배열 Af에서 True에 해당하는 원소, 즉 값이 15보다 큰 원소만 꺼낼 수 있다.

 

[]가 인덱스 뿐만 아니라 True만 골라잡는 역할도 할 수 있다는 것을 알게 되었다.

 

 

 

'Deep Learning' 카테고리의 다른 글

[Deep Learning] 220805 학습일기  (0) 2022.08.05
[Deep Learning] 220803 학습일기  (0) 2022.08.03
[Deep Learning] 220730 학습일기  (0) 2022.07.30
[Deep Learning] 220727 학습일기  (0) 2022.07.29
[Deep Learning] 220721 학습일기  (0) 2022.07.23