인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

ecomarine님의 프로필 이미지
ecomarine

작성한 질문수

[파이토치] 실전 인공지능으로 이어지는 딥러닝 - 기초부터 논문 구현까지

텐서(Tensor)

np.where 결과에서 dtype이 int64

작성

·

157

0

np.where 결과가 그냥 인덱스라고 생각했다가,

결과값 뒤에 [0]붙여 len()를 적용하기에 뭘까 생각했습니다.

튜플이라는 것을 무심코 들었네요. 

궁금한점은 

index 값이 들어가는데 튜플이 왜 필요할까?

그리고 dtype가 int64로 했을까?

인데스면 -값도 없는데

uint64로 하면 메모리도 줄이지 않을까 하는 생각이 들어서 질문 남깁니다. 

답변 1

1

딥러닝호형님의 프로필 이미지
딥러닝호형
지식공유자

1차원 배열인 경우에 인덱스가 하나로 표현이 되서 튜플의 두번 째 원소가 비게 되는데 2차원인 경우 행, 열 인덱스가 튜플의 원소로 나눠져서 표현되어 튜플이 비지 않게 됩니다.

예.

x = np.array([[1, 2, 3, 4, 5, 6], [-2, 1, 2, 3, 4, 5]])

idx = np.where(x>4)

idx

>>> (array([0, 0, 1]), array([4, 5, 5]))

이와 같은 원리로 3차원인 경우 원소가 3개인 튜플을 얻게 됩니다. 

타입 관련은 소스 코드를 공개되지 않아 정확한 이유는 모르겠지만 np.where가 컨디션을 줄 수 있는데 이 컨디션에 따라 음수 및 문자도 반환이 가능합니다. 그래서 기본적으로 uint64보다는 더 범위가 넓은 int64가 디폴트로 하고 문자인 경우에 str으로 처리가 된다고 추측해 봅니다.

답변이 도움이 되셨다면 좋아요 꾹꾹 눌러주세요 :)

열공 하세요!!

ecomarine님의 프로필 이미지
ecomarine

작성한 질문수

질문하기