[JAX] NaN, Inf 값 처리 및 조건에 맞는 요소 찾기

2023. 8. 13. 18:41·프로그래밍 Programming

JAX에서 값을 쓰다가 어려운 부분이 있으면 대체로 numpy에 있는 함수들과 비슷한 것이 많아서 찾기 쉽다.

 

 

1. NaN 값 찾기

import jax.numpy as jnp

a = jnp.array([jnp.nan,1,0,jnp.nan])
x = jnp.isnan(a)
print(x)
>> [ True False False  True]

 

 

 

2. +-Inf 값 찾기

 

import jax.numpy as jnp

a = jnp.array([jnp.inf,1,0,-jnp.inf])
x = jnp.isinf(a)
print(x)
>> [ True False False  True]

 

1,2번 항목을 보면 boolean array으로 나오기 때문에 위 코드에서 'a'라는 array에 대해 indexing하면 NaN값을 추출할 수 있고 역으로 not 연산자를 통해서 nan(또는 inf)가 아닌 값을 추출할 수 있다.

a[x]
>> [nan nan]
a[~x]
>> [1.,0.]

 

 

 

3. 조건에 맞는 인덱스 찾기

 

위에서는 값만 추출한다면 인덱스를 찾는 방법은 기존의 numpy 등에서 쓰는 방식과 거의 차이가 없다.

a = jnp.array([jnp.nan,1,0,-jnp.nan])
x = jnp.isnan(a)

print(jnp.where(x))
>> (Array([0, 3], dtype=int64),)

print(x.nonzero())
>> (Array([0, 3], dtype=int64),)

 

다음과 같이 where 또는 .nonzero()를 통해 구할 수 있는데

이 때 x라는 array는 True, False로 구성된 값들이기 때문에 이를 응용하면,

특정 조건에 해당하는 array를 구할 수 있다.

 

a = jnp.array([1.0, 2.0, 3.0])
x = a < 1.5

print(jnp.where(x))
>> (Array([0], dtype=int64),)
print(a[x])
>> [1.]

 

동작이 numpy와 동일해서 굳이 헷갈릴 이유는 없는 듯하다.

 

 

저작자표시 비영리 변경금지 (새창열림)

'프로그래밍 Programming' 카테고리의 다른 글

[JAX] 버전에 따른 변화  (0) 2023.11.22
[JAX] optax에서 learning rate 확인하는 방법  (0) 2023.08.23
[에러기록] cudnn 버전 문제 (E external/xla/xla/stream_executor/cuda/cuda_dnn.cc:433] Loaded runtime CuDNN library: 8.8.0 but source was compiled with: 8.9.1. CuDNN library needs to have matching major version and equal or higher minor version. ..  (0) 2023.08.02
[git blog] jekyll 테마 적용하면서 발생한 에러들  (0) 2023.05.10
[JupyterLab] 코드 줄 번호 default 표시, 폰트 사이즈, family 변경  (0) 2023.01.02
'프로그래밍 Programming' 카테고리의 다른 글
  • [JAX] 버전에 따른 변화
  • [JAX] optax에서 learning rate 확인하는 방법
  • [에러기록] cudnn 버전 문제 (E external/xla/xla/stream_executor/cuda/cuda_dnn.cc:433] Loaded runtime CuDNN library: 8.8.0 but source was compiled with: 8.9.1. CuDNN library needs to have matching major version and equal or higher minor version. ..
  • [git blog] jekyll 테마 적용하면서 발생한 에러들
보통의공대생
보통의공대생
수학,프로그래밍,기계항공우주 등 공부하는 기록들을 남깁니다.
  • 보통의공대생
    뛰는 놈 위에 나는 공대생
    보통의공대생
  • 전체
    오늘
    어제
    • 분류 전체보기 (460)
      • 공지 (1)
      • 영어 공부 English Study (40)
        • 텝스 TEPS (7)
        • 글 Article (21)
        • 영상 Video (10)
      • 연구 Research (99)
        • 최적화 Optimization (3)
        • 데이터과학 Data Science (7)
        • 인공지능 Artificial Intelligent (40)
        • 제어 Control (45)
      • 프로그래밍 Programming (103)
        • 매트랩 MATLAB (25)
        • 파이썬 Python (33)
        • 줄리아 Julia (2)
        • C++ (3)
        • 리눅스 우분투 Ubuntu (6)
      • 항공우주 Aeronautical engineeri.. (21)
        • 항법 Navigation (0)
        • 유도 Guidance (0)
      • 기계공학 Mechanical engineering (13)
        • 열역학 Thermodynamics (0)
        • 고체역학 Statics & Solid mechan.. (10)
        • 동역학 Dynamics (1)
        • 유체역학 Fluid Dynamics (0)
      • 수학 Mathematics (34)
        • 선형대수학 Linear Algebra (18)
        • 미분방정식 Differential Equation (3)
        • 확률및통계 Probability &amp; Sta.. (2)
        • 미적분학 Calculus (1)
        • 복소해석학 Complex Analysis (5)
        • 실해석학 Real Analysis (0)
      • 수치해석 Numerical Analysis (21)
      • 확률 및 랜덤프로세스 Random process (2)
      • 추론 & 추정 이론 Estimation (3)
      • 기타 (26)
        • 설계 프로젝트 System Design (8)
        • 논문작성 Writing (55)
        • 세미나 Seminar (2)
        • 생산성 Productivity (3)
      • 유학 생활 Daily (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    텝스
    수치해석
    JAX
    WOX
    ChatGPT
    Zotero
    고체역학
    Python
    Statics
    IEEE
    논문작성
    Numerical Analysis
    obsidian
    생산성
    옵시디언
    논문작성법
    Julia
    인공지능
    서버
    teps
    Linear algebra
    pytorch
    LaTeX
    딥러닝
    에러기록
    텝스공부
    우분투
    Dear abby
    MATLAB
    matplotlib
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
보통의공대생
[JAX] NaN, Inf 값 처리 및 조건에 맞는 요소 찾기
상단으로

티스토리툴바