2387.html 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685
  1. <!DOCTYPE html>
  2. <html lang="en" data-default-color-scheme=auto>
  3. <head><!-- hexo injector head_begin start -->
  4. <script async src="https://analytics.umami.is/script.js" data-website-id="e59ec28a-c9a7-4104-9e62-a9f7eb3fac0b"></script>
  5. <!-- hexo injector head_begin end -->
  6. <meta charset="UTF-8">
  7. <link rel="apple-touch-icon" sizes="76x76" href="https://img.limour.top/2023/08/29/64ee07361815a.webp">
  8. <link rel="icon" href="https://img.limour.top/2023/08/29/64ee07361815a.webp">
  9. <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0, shrink-to-fit=no">
  10. <meta http-equiv="x-ua-compatible" content="ie=edge">
  11. <meta name="theme-color" content="#2f4154">
  12. <meta name="author" content="Limour">
  13. <meta name="keywords" content="">
  14. <meta name="description" content="随着单细胞数据量的增长,计算要求成指数增长,当数据量大于10万个细胞的时候,seurat包分析就显得非常有压力了,因为在实时内存中储存数据就变得非常困难,HDF5数据格式提供了高效的磁盘存储,而不是在内存中存储数据,这就将分析扩展到大规模数据集,甚至可以达到大于100万细胞的级别 ,Linnarson实验室开发了一种基于hdf5的数据结构,loom,可以方便地存储单细胞基因组数据集和元数据。他们发">
  15. <meta property="og:type" content="article">
  16. <meta property="og:title" content="loom文件使用记录">
  17. <meta property="og:url" content="https://occdn.limour.top/2387.html">
  18. <meta property="og:site_name" content="Limour&#39;s Blog">
  19. <meta property="og:description" content="随着单细胞数据量的增长,计算要求成指数增长,当数据量大于10万个细胞的时候,seurat包分析就显得非常有压力了,因为在实时内存中储存数据就变得非常困难,HDF5数据格式提供了高效的磁盘存储,而不是在内存中存储数据,这就将分析扩展到大规模数据集,甚至可以达到大于100万细胞的级别 ,Linnarson实验室开发了一种基于hdf5的数据结构,loom,可以方便地存储单细胞基因组数据集和元数据。他们发">
  20. <meta property="og:locale" content="en_US">
  21. <meta property="article:published_time" content="2022-10-03T15:51:46.000Z">
  22. <meta property="article:modified_time" content="2023-09-01T13:28:03.497Z">
  23. <meta property="article:author" content="Limour">
  24. <meta name="twitter:card" content="summary_large_image">
  25. <title>loom文件使用记录 - Limour&#39;s Blog</title>
  26. <link rel="stylesheet" href="https://jscdn.limour.top/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" />
  27. <link rel="stylesheet" href="https://jscdn.limour.top/npm/github-markdown-css@4.0.0/github-markdown.min.css" />
  28. <link rel="stylesheet" href="https://jscdn.limour.top/npm/hint.css@2.7.0/hint.min.css" />
  29. <link rel="stylesheet" href="https://lib.baomitu.com/fancybox/3.5.7/jquery.fancybox.min.css" />
  30. <!-- 主题依赖的图标库,不要自行修改 -->
  31. <!-- Do not modify the link that theme dependent icons -->
  32. <link rel="stylesheet" href="//at.alicdn.com/t/font_1749284_hj8rtnfg7um.css">
  33. <link rel="stylesheet" href="//at.alicdn.com/t/font_1736178_lbnruvf0jn.css">
  34. <link rel="stylesheet" href="/css/main.css" />
  35. <link id="highlight-css" rel="stylesheet" href="/css/highlight.css" />
  36. <link id="highlight-css-dark" rel="stylesheet" href="/css/highlight-dark.css" />
  37. <link rel="stylesheet" href="/theme-inject/custom.css">
  38. <script id="fluid-configs">
  39. var Fluid = window.Fluid || {};
  40. Fluid.ctx = Object.assign({}, Fluid.ctx)
  41. var CONFIG = {"hostname":"occdn.limour.top","root":"/","version":"1.9.5-a","typing":{"enable":true,"typeSpeed":70,"cursorChar":"_","loop":false,"scope":[]},"anchorjs":{"enable":true,"element":"h1,h2,h3,h4,h5,h6","placement":"left","visible":"hover","icon":"§"},"progressbar":{"enable":true,"height_px":3,"color":"#29d","options":{"showSpinner":false,"trickleSpeed":100}},"code_language":{"enable":true,"default":"TEXT"},"copy_btn":true,"image_caption":{"enable":true},"image_zoom":{"enable":true,"img_url_replace":["",""]},"toc":{"enable":true,"placement":"right","headingSelector":"h1,h2,h3,h4,h5,h6","collapseDepth":0},"lazyload":{"enable":true,"loading_img":"https://jscdn.limour.top/gh/Limour-dev/Sakurairo_Vision/load_svg/inload.svg","onlypost":false,"offset_factor":2},"web_analytics":{"enable":false,"follow_dnt":true,"baidu":null,"google":{"measurement_id":null},"tencent":{"sid":null,"cid":null},"woyaola":null,"cnzz":null,"leancloud":{"app_id":null,"app_key":null,"server_url":null,"path":"window.location.pathname","ignore_local":false}},"search_path":"/local-search.xml","include_content_in_search":true};
  42. if (CONFIG.web_analytics.follow_dnt) {
  43. var dntVal = navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack;
  44. Fluid.ctx.dnt = dntVal && (dntVal.startsWith('1') || dntVal.startsWith('yes') || dntVal.startsWith('on'));
  45. }
  46. </script>
  47. <script src="/js/utils.js" ></script>
  48. <script src="/js/color-schema.js" ></script>
  49. <meta name="generator" content="Hexo 6.3.0"></head>
  50. <body>
  51. <header>
  52. <div class="header-inner" style="height: 70vh;">
  53. <nav id="navbar" class="navbar fixed-top navbar-expand-lg navbar-dark scrolling-navbar">
  54. <div class="container">
  55. <a class="navbar-brand" href="/">
  56. <strong>Limour&#39;s Blog</strong>
  57. </a>
  58. <button id="navbar-toggler-btn" class="navbar-toggler" type="button" data-toggle="collapse"
  59. data-target="#navbarSupportedContent"
  60. aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
  61. <div class="animated-icon"><span></span><span></span><span></span></div>
  62. </button>
  63. <!-- Collapsible content -->
  64. <div class="collapse navbar-collapse" id="navbarSupportedContent">
  65. <ul class="navbar-nav ml-auto text-center">
  66. <li class="nav-item">
  67. <a class="nav-link" href="/">
  68. <i class="iconfont icon-home-fill"></i>
  69. <span>Home</span>
  70. </a>
  71. </li>
  72. <li class="nav-item">
  73. <a class="nav-link" href="/archives/">
  74. <i class="iconfont icon-archive-fill"></i>
  75. <span>Archives</span>
  76. </a>
  77. </li>
  78. <li class="nav-item" id="search-btn">
  79. <a class="nav-link" target="_self" href="javascript:;" data-toggle="modal" data-target="#modalSearch" aria-label="Search">
  80. <i class="iconfont icon-search"></i>
  81. </a>
  82. </li>
  83. <li class="nav-item" id="color-toggle-btn">
  84. <a class="nav-link" target="_self" href="javascript:;" aria-label="Color Toggle">
  85. <i class="iconfont icon-dark" id="color-toggle-icon"></i>
  86. </a>
  87. </li>
  88. </ul>
  89. </div>
  90. </div>
  91. </nav>
  92. <div id="banner" class="banner" parallax=true
  93. style="background: url('https://img.limour.top/2023/08/29/64ee08e108638.webp') no-repeat center center; background-size: cover;">
  94. <div class="full-bg-img">
  95. <div class="mask flex-center" style="background-color: rgba(0, 0, 0, 0.3)">
  96. <div class="banner-text text-center fade-in-up">
  97. <div class="h2">
  98. <span id="subtitle" data-typed-text="loom文件使用记录"></span>
  99. </div>
  100. <div class="mt-3">
  101. <span class="post-meta">
  102. <i class="iconfont icon-date-fill" aria-hidden="true"></i>
  103. <time datetime="2022-10-03 23:51" pubdate>
  104. October 3, 2022 pm
  105. </time>
  106. </span>
  107. </div>
  108. <div class="mt-1">
  109. <span class="post-meta mr-2">
  110. <i class="iconfont icon-chart"></i>
  111. 4.6k words
  112. </span>
  113. <span class="post-meta mr-2">
  114. <i class="iconfont icon-clock-fill"></i>
  115. 39 mins
  116. </span>
  117. </div>
  118. </div>
  119. </div>
  120. </div>
  121. </div>
  122. </div>
  123. </header>
  124. <main>
  125. <div class="container-fluid nopadding-x">
  126. <div class="row nomargin-x">
  127. <div class="side-col d-none d-lg-block col-lg-2">
  128. </div>
  129. <div class="col-lg-8 nopadding-x-md">
  130. <div class="container nopadding-x-md" id="board-ctn">
  131. <div id="board">
  132. <article class="post-content mx-auto">
  133. <h1 id="seo-header">loom文件使用记录</h1>
  134. <div class="markdown-body">
  135. <p>随着单细胞数据量的增长,计算要求成指数增长,当数据量大于10万个细胞的时候,seurat包分析就显得非常有压力了,因为在实时内存中储存数据就变得非常困难,HDF5数据格式提供了高效的磁盘存储,而不是在内存中存储数据,这就将分析扩展到大规模数据集,甚至可以达到大于100万细胞的级别 ,Linnarson实验室开发了一种基于hdf5的数据结构,loom,可以方便地存储单细胞基因组数据集和元数据。他们发布了一个名为loompy的Python API来与loom文件交互,而<a target="_blank" rel="noopener" href="https://satijalab.org/loomr/loomr_tutorial">loomR</a>能基于R的与loom交互(<a target="_blank" rel="noopener" href="https://www.jianshu.com/p/7067e0ec6ed8">Merlin_cd6c</a>)</p>
  136. <h2 id="安装补充包"><a href="#安装补充包" class="headerlink" title="安装补充包"></a>安装补充包</h2><ul>
  137. <li><p><a href="https://occdn.limour.top/2371.html">conda activate seurat</a></p>
  138. </li>
  139. <li><p>conda install -c conda-forge r-hdf5r -y</p>
  140. </li>
  141. <li><p># conda install -c bioconda r-loom&#x3D;0.2.0.2 -y</p>
  142. </li>
  143. <li><p>wget <a target="_blank" rel="noopener" href="https://github.com/mojaveazure/loomR/archive/refs/heads/develop.zip">https://github.com/mojaveazure/loomR/archive/refs/heads/develop.zip</a> -O loomR-develop.zip</p>
  144. </li>
  145. <li><p>devtools::install_local(‘loomR-develop.zip’)</p>
  146. </li>
  147. <li><p>conda install -c conda-forge binutils_impl_linux-64 -y</p>
  148. </li>
  149. <li><p>BiocManager::install(“hdf5r”)</p>
  150. </li>
  151. <li><p>conda create -n loom -c conda-forge loompy&#x3D;3.0.6 -y</p>
  152. </li>
  153. <li><p>conda activate loom</p>
  154. </li>
  155. </ul>
  156. <h2 id="下载数据"><a href="#下载数据" class="headerlink" title="下载数据"></a>下载数据</h2><p><a target="_blank" rel="noopener" href="https://www.humancellatlas.org/">The Human Cell Atlas</a> is an international collaborative consortium that charts the cell types in the healthy body, across time from development to adulthood, and eventually to old age. This enormous undertaking, larger even than the Human Genome Project, will transform our understanding of the 37.2 trillion cells in the human body.</p>
  157. <p><a target="_blank" rel="noopener" href="https://data.humancellatlas.org/">The HCA Data Portal</a> stores and provides single-cell data contributed by labs around the world. Anyone can contribute data, find data, or access community tools and applications.</p>
  158. <ul>
  159. <li><code>wget &#39;https://storage.googleapis.com/datarepo-a6e6a252-bucket/8b504553-0300-426e-876c-116772d06c6e/485f373c-f3b3-47a2-8f9b-bbe007a4a75b/ProstateCellAtlas-human-prostate-gland-10xv2.loom?X-Goog-Algorithm=GOOG4-RSA-SHA256&amp;X-Goog-Credential=datarepo-jade-api%40terra-datarepo-production.iam.gserviceaccount.com%2F20221003%2Fauto%2Fstorage%2Fgoog4_request&amp;X-Goog-Date=20221003T121317Z&amp;X-Goog-Expires=900&amp;X-Goog-SignedHeaders=host&amp;X-Goog-Signature=7eab3ff712b55cf9812cc24b379500175005b7dc5e11e11d35cb0e36522310cf6c46574fc606754eb54a57286ac0fd60d6bd7d5871a1692b80be993c0ae96d85252df7acaf3367acd1e7f2dfdc41abbcfc0abb6305fa00c9ede58e843840e93685c5e47567b8dbcf6563411d294ae1ddc244f6434a5901ee4955f75df8993a4e39417b73357ac240d5fcb2d1f4699554480d3eccc8aec594e9b8b3511f164290559f4788e7b2ea5a3b3bd6aee21ebdfbe032859d27671b496480d29d9df5bafd790bf411e10da377f112c64c49900c4f9ce9a4566e87b327ba2550530a71969fd8e0fa0d637b481d496a50c86aea8dc010348e00bb39f6a69ce38ab70b51c77e&#39; -O ProstateCellAtlas-human-prostate-gland-10xv2.loom</code></li>
  160. </ul>
  161. <p>类似的网站:<a target="_blank" rel="noopener" href="https://cellxgene.cziscience.com/">CZ CELLxGENE</a>;可以<a target="_blank" rel="noopener" href="https://cellxgene.cziscience.com/datasets">检索需要的数据集</a>,下载rds格式的文件</p>
  162. <ul>
  163. <li><code>curl -o local.rds &quot;https://corpora-data-prod.s3.amazonaws.com/5484f890-7e6f-4eb4-821f-2fc995d10c47/local.rds?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Credential=ASIATLYQ5N5X7IE7U3FW%2F20221003%2Fus-west-2%2Fs3%2Faws4_request&amp;X-Amz-Date=20221003T131441Z&amp;X-Amz-Expires=604800&amp;X-Amz-SignedHeaders=host&amp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjEOz%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIDqVa2igyV9%2BOaaQGXPAxZb%2FrSKXPH0JNBf1zPb5S33wAiEA1zFz8ZKqLcGz9Ip%2FqeJvw0JMTKkptGz%2FInBtdfurxZEq9AMIpf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARABGgwyMzE0MjY4NDY1NzUiDOTNFg85zD2F0B0FISrIA0CT3GUFmKR4ScNFtM%2B0FU4nIVrD7lM%2FecCE9SVHJM%2F6QGWPA7E3LWr9KcWMByy3jEQ9FRAjlsr26v2d8Znt2tAkvIcF7xiQaR1qgISi0Xak0EZceNUMTknU85CCPwPC7%2FiwxckmUX%2B0o0V11yh3rQyhHvpdcgO5COGafKwMIHYtldJNuTF0B9TTf1WVJkfZv%2Bl6o7DxHahwkb9oWWBKON9cM37oXDcH7m%2BD6szQamWY6bKNN2QNcBkKFy66ndKeFpdz6annSJKR98c8MmwGdoA9DzwixxiXZhIOR7IGD9N5oIy28sd9ZyPnBwSOEmkHB%2B61TXkwV28Li7NFfe7z6a0kpG3LiRSKPmhtC8cu5LlFUnLKqHeD1tXrVkOixukdPacWLQyAQDSYaUGoZVS7ESW2Y11bSxZLCEZ97RIM5OwOQIfv%2FsQUQLic9qDmlStQCYAVBkdmApA4a3kKbMHcOVOwECwTnUDEr36oevJMqaP688egzOjpfqkshXGLRZ%2BtA9yIn1RGqrwT%2Bl%2BStPc2s2hFBue6q9sd1aVmS3VDfiRHlvMgDS3et0jnWvUVih95U8RaeMBNVYfl4P%2BMMbhgmPFEp%2B%2F03nS%2BbzD9ouuZBjqlAYt4%2FOil7fZYzwhlUd0nHWnBLsP5w0g1EBURMhQHCtKBcNf2deWPQLlnQFQSwZhCOaYtNhZ679%2FDcsiCUCgQJUj4sTm1kbxjQouHVaOnml%2FlYM6VaJo6aLjvB%2F%2Bx9u4G925PZK1CUToWyoVyWw4sPhbGuBYRTPzzNIACi5ZuCB0DZ0cjhD86pv71dJIE%2BfwzGlEzzyVEK5nkSuKbxw4aYBOA3oTaXA%3D%3D&amp;X-Amz-Signature=0e5c2ff76b231c5591672b93de4a77128e5757e50c699636a757e8eefba180aa&quot;</code></li>
  164. <li>mv local.rds cellxgene_Human_prostate.rds</li>
  165. </ul>
  166. <h2 id="使用记录"><a href="#使用记录" class="headerlink" title="使用记录"></a>使用记录</h2><p>公共的集群是真难用,一堆包装半天装不上,磁盘IO慢的一批。。。。。</p>
  167. <figure class="highlight r"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><code class="hljs R">conda activate seurat<br>.libPaths<span class="hljs-punctuation">(</span><span class="hljs-string">&#x27;&#x27;</span><span class="hljs-punctuation">)</span><br>sce <span class="hljs-operator">&lt;-</span> loomR<span class="hljs-operator">::</span>connect<span class="hljs-punctuation">(</span>filename <span class="hljs-operator">=</span> <span class="hljs-string">&quot;./HumanCellAtlas/ProstateCellAtlas/ProstateCellAtlas-human-prostate-gland-10xv2.loom&quot;</span><span class="hljs-punctuation">,</span> mode <span class="hljs-operator">=</span> <span class="hljs-string">&quot;r&quot;</span><span class="hljs-punctuation">,</span> skip.validate <span class="hljs-operator">=</span> <span class="hljs-built_in">T</span><span class="hljs-punctuation">)</span><br>mat <span class="hljs-operator">&lt;-</span> sce<span class="hljs-punctuation">[[</span><span class="hljs-string">&quot;matrix&quot;</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">[</span><span class="hljs-punctuation">,</span><span class="hljs-punctuation">]</span><br>gene <span class="hljs-operator">&lt;-</span> sce<span class="hljs-operator">$</span>row.attrs<span class="hljs-operator">$</span>Gene<span class="hljs-punctuation">[</span><span class="hljs-punctuation">]</span><br><span class="hljs-comment"># barcode &lt;- sce$col.attrs$CellID[]</span><br>barcode <span class="hljs-operator">&lt;-</span> sce<span class="hljs-operator">$</span>col.attrs<span class="hljs-operator">$</span>cell_names<span class="hljs-punctuation">[</span><span class="hljs-punctuation">]</span><br>mat <span class="hljs-operator">&lt;-</span> t<span class="hljs-punctuation">(</span>mat<span class="hljs-punctuation">)</span><br>colnames<span class="hljs-punctuation">(</span>mat<span class="hljs-punctuation">)</span><span class="hljs-operator">=</span> barcode<br>rownames<span class="hljs-punctuation">(</span>mat<span class="hljs-punctuation">)</span><span class="hljs-operator">=</span> gene<br>sce<span class="hljs-operator">$</span>close_all<span class="hljs-punctuation">(</span><span class="hljs-punctuation">)</span><br>sce <span class="hljs-operator">&lt;-</span> Seurat<span class="hljs-operator">::</span>CreateSeuratObject<span class="hljs-punctuation">(</span>counts <span class="hljs-operator">=</span> mat<span class="hljs-punctuation">,</span> project <span class="hljs-operator">=</span> <span class="hljs-string">&#x27;prostate&#x27;</span><span class="hljs-punctuation">,</span> min.cells <span class="hljs-operator">=</span> <span class="hljs-number">3</span><span class="hljs-punctuation">,</span> min.features <span class="hljs-operator">=</span> <span class="hljs-number">200</span><span class="hljs-punctuation">)</span><br>rm<span class="hljs-punctuation">(</span>mat<span class="hljs-punctuation">)</span><br>gc<span class="hljs-punctuation">(</span><span class="hljs-punctuation">)</span><br><span class="hljs-comment"># used (Mb) gc trigger (Mb) max used (Mb)</span><br><span class="hljs-comment"># Ncells 3611333 192.9 6136950 327.8 6136950 327.8</span><br><span class="hljs-comment"># Vcells 287451723 2193.1 45703419996 348689.5 57126196661 435838.3</span><br>sce<br><span class="hljs-comment"># An object of class Seurat </span><br><span class="hljs-comment"># 39879 features across 128673 samples within 1 assay </span><br><span class="hljs-comment"># Active assay: RNA (39879 features, 0 variable features)</span><br></code></pre></td></tr></table></figure>
  168. </div>
  169. <hr/>
  170. <div>
  171. <div class="post-metas my-3">
  172. <div class="post-meta mr-3 d-flex align-items-center">
  173. <i class="iconfont icon-category"></i>
  174. <span class="category-chains">
  175. <span class="category-chain">
  176. <a href="/categories/%E5%8E%9F%E5%A7%8B%E6%95%B0%E6%8D%AE/" class="category-chain-item">原始数据</a>
  177. </span>
  178. </span>
  179. </div>
  180. </div>
  181. <div class="license-box my-3">
  182. <div class="license-title">
  183. <div>loom文件使用记录</div>
  184. <div>https://occdn.limour.top/2387.html</div>
  185. </div>
  186. <div class="license-meta">
  187. <div class="license-meta-item">
  188. <div>Author</div>
  189. <div>Limour</div>
  190. </div>
  191. <div class="license-meta-item license-meta-date">
  192. <div>Posted on</div>
  193. <div>October 3, 2022</div>
  194. </div>
  195. <div class="license-meta-item">
  196. <div>Licensed under</div>
  197. <div>
  198. <a class="print-no-link" target="_blank" href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
  199. <span class="hint--top hint--rounded" aria-label="BY - Attribution">
  200. <i class="iconfont icon-by"></i>
  201. </span>
  202. </a>
  203. <a class="print-no-link" target="_blank" href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
  204. <span class="hint--top hint--rounded" aria-label="NC - Non-commercial">
  205. <i class="iconfont icon-nc"></i>
  206. </span>
  207. </a>
  208. <a class="print-no-link" target="_blank" href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
  209. <span class="hint--top hint--rounded" aria-label="SA - Share-alike">
  210. <i class="iconfont icon-sa"></i>
  211. </span>
  212. </a>
  213. </div>
  214. </div>
  215. </div>
  216. <div class="license-icon iconfont"></div>
  217. </div>
  218. <div class="post-prevnext my-3">
  219. <article class="post-prev col-6">
  220. <a href="/2392.html" title="构造Pseudo-bulk的表达量矩阵加速SingleR运行">
  221. <i class="iconfont icon-arrowleft"></i>
  222. <span class="hidden-mobile">构造Pseudo-bulk的表达量矩阵加速SingleR运行</span>
  223. <span class="visible-mobile">Previous</span>
  224. </a>
  225. </article>
  226. <article class="post-next col-6">
  227. <a href="/2381.html" title="Jupyter添加Golang内核">
  228. <span class="hidden-mobile">Jupyter添加Golang内核</span>
  229. <span class="visible-mobile">Next</span>
  230. <i class="iconfont icon-arrowright"></i>
  231. </a>
  232. </article>
  233. </div>
  234. </div>
  235. <article id="comments" lazyload>
  236. <div id="waline"></div>
  237. <script type="text/javascript">
  238. Fluid.utils.loadComments('#waline', function() {
  239. Fluid.utils.createCssLink('https://cdn.staticfile.org/waline/2.15.5/waline.min.css')
  240. Fluid.utils.createScript('https://cdn.staticfile.org/waline/2.15.5/waline.min.js', function() {
  241. var options = Object.assign(
  242. {"serverURL":"https://comments.limour.top","path":"window.location.pathname","meta":["nick","mail","link"],"requiredMeta":["nick"],"lang":"zh-CN","emoji":["https://jscdn.limour.top/gh/walinejs/emojis/weibo"],"dark":"html[data-user-color-scheme=\"dark\"]","wordLimit":0,"pageSize":10},
  243. {
  244. el: '#waline',
  245. path: window.location.pathname
  246. }
  247. )
  248. Waline.init(options);
  249. Fluid.utils.waitElementVisible('#waline .vcontent', () => {
  250. var imgSelector = '#waline .vcontent img:not(.vemoji)';
  251. Fluid.plugins.imageCaption(imgSelector);
  252. Fluid.plugins.fancyBox(imgSelector);
  253. })
  254. });
  255. });
  256. </script>
  257. <noscript>Please enable JavaScript to view the comments</noscript>
  258. </article>
  259. </article>
  260. </div>
  261. </div>
  262. </div>
  263. <div class="side-col d-none d-lg-block col-lg-2">
  264. <aside class="sidebar" style="margin-left: -1rem">
  265. <div id="toc">
  266. <p class="toc-header">
  267. <i class="iconfont icon-list"></i>
  268. <span>Table of Contents</span>
  269. </p>
  270. <div class="toc-body" id="toc-body"></div>
  271. </div>
  272. </aside>
  273. </div>
  274. </div>
  275. </div>
  276. <a id="scroll-top-button" aria-label="TOP" href="#" role="button">
  277. <i class="iconfont icon-arrowup" aria-hidden="true"></i>
  278. </a>
  279. <div class="modal fade" id="modalSearch" tabindex="-1" role="dialog" aria-labelledby="ModalLabel"
  280. aria-hidden="true">
  281. <div class="modal-dialog modal-dialog-scrollable modal-lg" role="document">
  282. <div class="modal-content">
  283. <div class="modal-header text-center">
  284. <h4 class="modal-title w-100 font-weight-bold">Search</h4>
  285. <button type="button" id="local-search-close" class="close" data-dismiss="modal" aria-label="Close">
  286. <span aria-hidden="true">&times;</span>
  287. </button>
  288. </div>
  289. <div class="modal-body mx-3">
  290. <div class="md-form mb-5">
  291. <input type="text" id="local-search-input" class="form-control validate">
  292. <label data-error="x" data-success="v" for="local-search-input">Keyword</label>
  293. </div>
  294. <div class="list-group" id="local-search-result"></div>
  295. </div>
  296. </div>
  297. </div>
  298. </div>
  299. </main>
  300. <footer>
  301. <div class="footer-inner">
  302. <div class="footer-content">
  303. <a target="_blank" rel="nofollow noopener" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=43130202000203"><img src="https://img.limour.top/2023/08/27/64eadeb81d6a0.webp" srcset="https://jscdn.limour.top/gh/Limour-dev/Sakurairo_Vision/load_svg/inload.svg" lazyload>湘公网安备 43130202000203号 </a> <a target="_blank" rel="nofollow noopener" href="https://beian.miit.gov.cn/">湘ICP备20008299号 </a> <a target="_blank" rel="nofollow noopener" href="https://icp.gov.moe/?keyword=20210128">萌ICP备20210128号</a> <br> <a href="https://www.foreverblog.cn/" target="_blank"> <img src="https://img.foreverblog.cn/logo_en_default.png" srcset="https://jscdn.limour.top/gh/Limour-dev/Sakurairo_Vision/load_svg/inload.svg" lazyload alt="" style="width:auto;height:24px"> </a> <br> <a href="https://hexo.io" target="_blank" rel="nofollow noopener"><span>Hexo</span></a> <i class="iconfont icon-love"></i> <a href="https://github.com/fluid-dev/hexo-theme-fluid" target="_blank" rel="nofollow noopener"><span>Fluid</span></a> <i class="iconfont icon-love"></i> <a href="https://github.com/limour-blog/archives-occdn" target="_blank" rel="nofollow noopener"><span>SRC</span></a>
  304. </div>
  305. </div>
  306. </footer>
  307. <!-- Scripts -->
  308. <script src="https://jscdn.limour.top/npm/nprogress@0.2.0/nprogress.min.js" ></script>
  309. <link rel="stylesheet" href="https://jscdn.limour.top/npm/nprogress@0.2.0/nprogress.min.css" />
  310. <script>
  311. NProgress.configure({"showSpinner":false,"trickleSpeed":100})
  312. NProgress.start()
  313. window.addEventListener('load', function() {
  314. NProgress.done();
  315. })
  316. </script>
  317. <script src="https://jscdn.limour.top/npm/jquery@3.6.4/dist/jquery.min.js" ></script>
  318. <script src="https://jscdn.limour.top/npm/bootstrap@4.6.1/dist/js/bootstrap.min.js" ></script>
  319. <script src="/js/events.js" ></script>
  320. <script src="/js/plugins.js" ></script>
  321. <script src="https://lib.baomitu.com/typed.js/2.0.12/typed.min.js" ></script>
  322. <script>
  323. (function (window, document) {
  324. var typing = Fluid.plugins.typing;
  325. var subtitle = document.getElementById('subtitle');
  326. if (!subtitle || !typing) {
  327. return;
  328. }
  329. var text = subtitle.getAttribute('data-typed-text');
  330. typing(text);
  331. })(window, document);
  332. </script>
  333. <script src="/js/img-lazyload.js" ></script>
  334. <script>
  335. Fluid.utils.createScript('https://jscdn.limour.top/npm/tocbot@4.20.1/dist/tocbot.min.js', function() {
  336. var toc = jQuery('#toc');
  337. if (toc.length === 0 || !window.tocbot) { return; }
  338. var boardCtn = jQuery('#board-ctn');
  339. var boardTop = boardCtn.offset().top;
  340. window.tocbot.init(Object.assign({
  341. tocSelector : '#toc-body',
  342. contentSelector : '.markdown-body',
  343. linkClass : 'tocbot-link',
  344. activeLinkClass : 'tocbot-active-link',
  345. listClass : 'tocbot-list',
  346. isCollapsedClass: 'tocbot-is-collapsed',
  347. collapsibleClass: 'tocbot-is-collapsible',
  348. scrollSmooth : true,
  349. includeTitleTags: true,
  350. headingsOffset : -boardTop,
  351. }, CONFIG.toc));
  352. if (toc.find('.toc-list-item').length > 0) {
  353. toc.css('visibility', 'visible');
  354. }
  355. Fluid.events.registerRefreshCallback(function() {
  356. if ('tocbot' in window) {
  357. tocbot.refresh();
  358. var toc = jQuery('#toc');
  359. if (toc.length === 0 || !tocbot) {
  360. return;
  361. }
  362. if (toc.find('.toc-list-item').length > 0) {
  363. toc.css('visibility', 'visible');
  364. }
  365. }
  366. });
  367. });
  368. </script>
  369. <script src=https://lib.baomitu.com/clipboard.js/2.0.11/clipboard.min.js></script>
  370. <script>Fluid.plugins.codeWidget();</script>
  371. <script>
  372. Fluid.utils.createScript('https://jscdn.limour.top/npm/anchor-js@4.3.1/anchor.min.js', function() {
  373. window.anchors.options = {
  374. placement: CONFIG.anchorjs.placement,
  375. visible : CONFIG.anchorjs.visible
  376. };
  377. if (CONFIG.anchorjs.icon) {
  378. window.anchors.options.icon = CONFIG.anchorjs.icon;
  379. }
  380. var el = (CONFIG.anchorjs.element || 'h1,h2,h3,h4,h5,h6').split(',');
  381. var res = [];
  382. for (var item of el) {
  383. res.push('.markdown-body > ' + item.trim());
  384. }
  385. if (CONFIG.anchorjs.placement === 'left') {
  386. window.anchors.options.class = 'anchorjs-link-left';
  387. }
  388. window.anchors.add(res.join(', '));
  389. Fluid.events.registerRefreshCallback(function() {
  390. if ('anchors' in window) {
  391. anchors.removeAll();
  392. var el = (CONFIG.anchorjs.element || 'h1,h2,h3,h4,h5,h6').split(',');
  393. var res = [];
  394. for (var item of el) {
  395. res.push('.markdown-body > ' + item.trim());
  396. }
  397. if (CONFIG.anchorjs.placement === 'left') {
  398. anchors.options.class = 'anchorjs-link-left';
  399. }
  400. anchors.add(res.join(', '));
  401. }
  402. });
  403. });
  404. </script>
  405. <script>
  406. Fluid.utils.createScript('https://lib.baomitu.com/fancybox/3.5.7/jquery.fancybox.min.js', function() {
  407. Fluid.plugins.fancyBox();
  408. });
  409. </script>
  410. <script>Fluid.plugins.imageCaption();</script>
  411. <script src="/js/local-search.js" ></script>
  412. <!-- 主题的启动项,将它保持在最底部 -->
  413. <!-- the boot of the theme, keep it at the bottom -->
  414. <script src="/js/boot.js" ></script>
  415. <noscript>
  416. <div class="noscript-warning">Blog works best with JavaScript enabled</div>
  417. </noscript>
  418. <!-- hexo injector body_end start -->
  419. <script defer src="/theme-inject/timeliness.js"></script>
  420. <!-- hexo injector body_end end --></body>
  421. </html>