Last active
November 24, 2019 20:35
-
-
Save gokceneraslan/2744cfeda702fb9b9e48d0216427372c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## log1p with different bases in Scanpy" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import scanpy as sc\n", | |
| "import numpy as np\n", | |
| "from numba import vectorize, float64, float32, int32, int64" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "@vectorize([float64(int32),\n", | |
| " float64(int64),\n", | |
| " float32(float32),\n", | |
| " float64(float64)])\n", | |
| "def log1p(x):\n", | |
| " # see: https://github.com/numpy/numpy/blob/master/numpy/core/src/npymath/npy_math_internal.h.src#L86\n", | |
| " if np.isinf(x) and x > 0: \n", | |
| " return x\n", | |
| " \n", | |
| " u = 1. + x\n", | |
| " d = u - 1.\n", | |
| " \n", | |
| " if d == 0.:\n", | |
| " return x\n", | |
| " \n", | |
| " return np.log(u) * x / d\n", | |
| "\n", | |
| "@vectorize([float64(int32),\n", | |
| " float64(int64),\n", | |
| " float32(float32),\n", | |
| " float64(float64)])\n", | |
| "def log2_1p(x):\n", | |
| " if np.isinf(x) and x > 0: \n", | |
| " return x\n", | |
| " \n", | |
| " u = 1. + x\n", | |
| " d = u - 1.\n", | |
| " \n", | |
| " if d == 0:\n", | |
| " return x\n", | |
| "\n", | |
| " return np.log2(u) * x / d\n", | |
| "\n", | |
| "\n", | |
| "@vectorize([float64(int32),\n", | |
| " float64(int64),\n", | |
| " float32(float32),\n", | |
| " float64(float64)])\n", | |
| "def log10_1p(x):\n", | |
| " if np.isinf(x) and x > 0: \n", | |
| " return x\n", | |
| " \n", | |
| " u = 1. + x\n", | |
| " d = u - 1.\n", | |
| " \n", | |
| " if d == 0.:\n", | |
| " return x\n", | |
| "\n", | |
| " return np.log10(u) * x / d" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "WARNING: In Scanpy 0.*, this returned logarithmized data. Now it returns non-logarithmized data.\n" | |
| ] | |
| }, | |
| { | |
| "name": "stderr", | |
| "output_type": "stream", | |
| "text": [ | |
| "... storing 'paul15_clusters' as categorical\n", | |
| "Trying to set attribute `.uns` of view, making a copy.\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "AnnData object with n_obs × n_vars = 2730 × 3451 \n", | |
| " obs: 'paul15_clusters'\n", | |
| " uns: 'iroot'" | |
| ] | |
| }, | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "adata = sc.datasets.paul15()\n", | |
| "adata" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "sc.pp.normalize_total(adata, target_sum=10000)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "adata.X[0, 0] = 1e-30" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[1.0000000e-30, 0.0000000e+00, 0.0000000e+00, ..., 0.0000000e+00,\n", | |
| " 5.6657223e+01, 0.0000000e+00],\n", | |
| " [0.0000000e+00, 0.0000000e+00, 3.9123631e+00, ..., 0.0000000e+00,\n", | |
| " 3.9123631e+00, 0.0000000e+00],\n", | |
| " [2.1510003e+00, 0.0000000e+00, 6.4530010e+00, ..., 4.3020005e+00,\n", | |
| " 6.4530010e+00, 0.0000000e+00],\n", | |
| " ...,\n", | |
| " [0.0000000e+00, 0.0000000e+00, 2.2573362e+01, ..., 0.0000000e+00,\n", | |
| " 0.0000000e+00, 0.0000000e+00],\n", | |
| " [9.2250929e+00, 0.0000000e+00, 9.2250929e+00, ..., 0.0000000e+00,\n", | |
| " 3.0750308e+00, 0.0000000e+00],\n", | |
| " [0.0000000e+00, 0.0000000e+00, 6.2490234e+00, ..., 1.5622559e+00,\n", | |
| " 1.5622559e+00, 1.5622559e+00]], dtype=float32)" | |
| ] | |
| }, | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "adata.X" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stderr", | |
| "output_type": "stream", | |
| "text": [ | |
| "/usr/local/lib/python3.7/site-packages/ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in log1p\n", | |
| " \"\"\"Entry point for launching an IPython kernel.\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(array([[1.0000000e-30, 0.0000000e+00, 0.0000000e+00, ..., 0.0000000e+00,\n", | |
| " 4.0545154e+00, 0.0000000e+00],\n", | |
| " [0.0000000e+00, 0.0000000e+00, 1.5917552e+00, ..., 0.0000000e+00,\n", | |
| " 1.5917552e+00, 0.0000000e+00],\n", | |
| " [1.1477200e+00, 0.0000000e+00, 2.0086167e+00, ..., 1.6680843e+00,\n", | |
| " 2.0086167e+00, 0.0000000e+00],\n", | |
| " ...,\n", | |
| " [0.0000000e+00, 0.0000000e+00, 3.1601174e+00, ..., 0.0000000e+00,\n", | |
| " 0.0000000e+00, 0.0000000e+00],\n", | |
| " [2.3248448e+00, 0.0000000e+00, 2.3248448e+00, ..., 0.0000000e+00,\n", | |
| " 1.4048783e+00, 0.0000000e+00],\n", | |
| " [0.0000000e+00, 0.0000000e+00, 1.9808668e+00, ..., 9.4088805e-01,\n", | |
| " 9.4088805e-01, 9.4088805e-01]], dtype=float32),\n", | |
| " array([[1.0000000e-30, 0.0000000e+00, 0.0000000e+00, ..., 0.0000000e+00,\n", | |
| " 4.0545154e+00, 0.0000000e+00],\n", | |
| " [0.0000000e+00, 0.0000000e+00, 1.5917552e+00, ..., 0.0000000e+00,\n", | |
| " 1.5917552e+00, 0.0000000e+00],\n", | |
| " [1.1477200e+00, 0.0000000e+00, 2.0086167e+00, ..., 1.6680843e+00,\n", | |
| " 2.0086167e+00, 0.0000000e+00],\n", | |
| " ...,\n", | |
| " [0.0000000e+00, 0.0000000e+00, 3.1601174e+00, ..., 0.0000000e+00,\n", | |
| " 0.0000000e+00, 0.0000000e+00],\n", | |
| " [2.3248448e+00, 0.0000000e+00, 2.3248448e+00, ..., 0.0000000e+00,\n", | |
| " 1.4048783e+00, 0.0000000e+00],\n", | |
| " [0.0000000e+00, 0.0000000e+00, 1.9808668e+00, ..., 9.4088805e-01,\n", | |
| " 9.4088805e-01, 9.4088805e-01]], dtype=float32),\n", | |
| " array([[0. , 0. , 0. , ..., 0. , 4.0545154 ,\n", | |
| " 0. ],\n", | |
| " [0. , 0. , 1.5917552 , ..., 0. , 1.5917552 ,\n", | |
| " 0. ],\n", | |
| " [1.14772 , 0. , 2.0086167 , ..., 1.6680843 , 2.0086167 ,\n", | |
| " 0. ],\n", | |
| " ...,\n", | |
| " [0. , 0. , 3.1601174 , ..., 0. , 0. ,\n", | |
| " 0. ],\n", | |
| " [2.3248448 , 0. , 2.3248448 , ..., 0. , 1.4048783 ,\n", | |
| " 0. ],\n", | |
| " [0. , 0. , 1.9808668 , ..., 0.94088805, 0.94088805,\n", | |
| " 0.94088805]], dtype=float32))" | |
| ] | |
| }, | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "log1p(adata.X), np.log1p(adata.X), np.log(adata.X + 1.)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stderr", | |
| "output_type": "stream", | |
| "text": [ | |
| "/usr/local/lib/python3.7/site-packages/ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in log1p\n", | |
| " \"\"\"Entry point for launching an IPython kernel.\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "True" | |
| ] | |
| }, | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "np.allclose(log1p(adata.X), np.log1p(adata.X), rtol=1e-50, atol=1e-50)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "AnnData object with n_obs × n_vars = 2730 × 3451 \n", | |
| " obs: 'paul15_clusters'\n", | |
| " uns: 'iroot'" | |
| ] | |
| }, | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "adata" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stderr", | |
| "output_type": "stream", | |
| "text": [ | |
| "/usr/local/lib/python3.7/site-packages/ipykernel_launcher.py:2: RuntimeWarning: invalid value encountered in log1p\n", | |
| " \n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(array([[0. , 0. , 0. , 0. ],\n", | |
| " [0. , 3.912363, 3.912363, 0. ]], dtype=float32),\n", | |
| " array([[0. , 0. , 0. , 0. ],\n", | |
| " [0. , 1.5917552, 1.5917552, 0. ]], dtype=float32))" | |
| ] | |
| }, | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "x = adata.X[:2, 1:5]\n", | |
| "x, log1p(x)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[1.0000000e-30, 0.0000000e+00, 0.0000000e+00, ..., 0.0000000e+00,\n", | |
| " 5.8494296e+00, 0.0000000e+00],\n", | |
| " [0.0000000e+00, 0.0000000e+00, 2.2964172e+00, ..., 0.0000000e+00,\n", | |
| " 2.2964172e+00, 0.0000000e+00],\n", | |
| " [1.6558099e+00, 0.0000000e+00, 2.8978214e+00, ..., 2.4065368e+00,\n", | |
| " 2.8978214e+00, 0.0000000e+00],\n", | |
| " ...,\n", | |
| " [0.0000000e+00, 0.0000000e+00, 4.5590858e+00, ..., 0.0000000e+00,\n", | |
| " 0.0000000e+00, 0.0000000e+00],\n", | |
| " [3.3540421e+00, 0.0000000e+00, 3.3540421e+00, ..., 0.0000000e+00,\n", | |
| " 2.0268109e+00, 0.0000000e+00],\n", | |
| " [0.0000000e+00, 0.0000000e+00, 2.8577867e+00, ..., 1.3574146e+00,\n", | |
| " 1.3574146e+00, 1.3574146e+00]], dtype=float32)" | |
| ] | |
| }, | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "log2_1p(adata.X)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 12, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stderr", | |
| "output_type": "stream", | |
| "text": [ | |
| "/usr/local/lib/python3.7/site-packages/ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in log10_1p\n", | |
| " \"\"\"Entry point for launching an IPython kernel.\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[1.0000000e-30, 0.0000000e+00, 0.0000000e+00, ..., 0.0000000e+00,\n", | |
| " 1.7608538e+00, 0.0000000e+00],\n", | |
| " [0.0000000e+00, 0.0000000e+00, 6.9129044e-01, ..., 0.0000000e+00,\n", | |
| " 6.9129044e-01, 0.0000000e+00],\n", | |
| " [4.9844843e-01, 0.0000000e+00, 8.7233120e-01, ..., 7.2443974e-01,\n", | |
| " 8.7233120e-01, 0.0000000e+00],\n", | |
| " ...,\n", | |
| " [0.0000000e+00, 0.0000000e+00, 1.3724215e+00, ..., 0.0000000e+00,\n", | |
| " 0.0000000e+00, 0.0000000e+00],\n", | |
| " [1.0096673e+00, 0.0000000e+00, 1.0096673e+00, ..., 0.0000000e+00,\n", | |
| " 6.1013091e-01, 0.0000000e+00],\n", | |
| " [0.0000000e+00, 0.0000000e+00, 8.6027950e-01, ..., 4.0862250e-01,\n", | |
| " 4.0862250e-01, 4.0862250e-01]], dtype=float32)" | |
| ] | |
| }, | |
| "execution_count": 12, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "log10_1p(adata.X)" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.7.4" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 4 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment