29.4 유전체·단일세포 데이터

실습 · 연습문제 1개

개수 행렬의 정규화와 log1p normalize-counts

세포 × 유전자 개수 행렬 counts (shape (N, G), 음이 아닌 정수)를 받아, 세포마다 총합을 target_sum으로 맞춘 뒤 자연로그 log⁡(1+x)\log(1 + x)로 변환한 행렬을 반환하는 함수 normalize_log1p(counts, target_sum=1e4)를 완성한다.

x~ig=log⁡ ⁣(1+target_sum⋅xig∑hxih)\tilde{x}_{ig} = \log\!\Big(1 + \text{target\_sum} \cdot \frac{x_{ig}}{\sum_{h} x_{ih}}\Big)
  • 반환값은 (N, G) 실수 배열이다. 입력 배열을 바꾸지 않는다.
  • 총 개수가 0인 세포(빈 droplet 등)는 0으로 나눌 수 없다. 이런 세포의 행은 모두 0으로 둔다. 경고나 nan이 나오면 안 된다.
  • target_sum을 바꿀 수 있어야 한다.

테스트는 손으로 계산한 값, 깊이가 두 배인 세포가 같은 값을 갖는지, 정규화 뒤(로그 전) 각 세포의 총합이 target_sum인지, 빈 세포 처리를 확인한다.

힌트: 총합이 0인 행은 나누기 전에 분모를 1로 바꾸어 두면 결과가 자연스럽게 0이 된다.