Xenium | 细胞邻域(Cellular Neighborhood)分析(fixed radius)
上节我们介绍了空间转录组数据分析中常见的细胞邻域分析,CN计算过程中定义是否为细胞邻居的方法有两种,一种是上节我们使用固定K最近邻方法(fixed k-nearest neighbors)定义细胞Neighborhood,今天我们介绍另外一种固定半径范围内(fixed radius)内细胞的方法定义CN的方法。
计算方法
-
无监督邻域分析
-
邻近窗口构建:以每个细胞为中心,计算其一定半径范围(radius)内细胞的物理距离,形成局部窗口。
-
K-means聚类:将所有窗口的细胞类型组成进行聚类,识别出具有相似细胞类型组成的空间区域,即邻域。
-
富集分析:通过超几何检验(hypergeometric test)评估每个邻域中特定细胞类型的富集程度。公式如下:

-
其中,N为总细胞数,K为某细胞类型的总数量,n为邻域内细胞数,k为邻域内该细胞类型的数量。通过Benjamini-Hochberg方法校正多重假设检验的p值。
-
-
邻域注释
根据富集的细胞类型和已知生物学知识(如动脉、内骨膜的位置),为每个聚类赋予生物学意义的名称(如“早期髓系-动脉邻域”)。
fixed radius neighbors
def cell_neighbors(adata, column, radius=20, n_clusters=10):"""基于半径搜索细胞邻域并聚类细胞邻域类型Parameters----------adata : AnnData包含空间转录组数据的对象column : str细胞类型或分组的列名(存储在 `adata.obs` 中)radius : float, default=10空间邻居搜索半径(单位需与坐标一致)n_clusters : int, default=10邻域聚类数量Returns-------adata : AnnData更新后的对象,邻域聚类结果存储在 `adata.obs[f'CNs_{n_clusters}']`"""# 获取空间坐标和细胞类型 one-hot 编码spatial_coords = adata.obsm['spatial']onehot_encoding = pd.get_dummies(adata.obs[column])cluster_cols = adata.obs[column].unique()values = onehot_encoding[cluster_cols].values# Step 1: 使用半径搜索邻居nbrs = NearestNeighbors(radius=radius, metric='euclidean').fit(spatial_coords)distances, indices = nbrs.radius_neighbors(spatial_coords, return_distance=True)# Step 2: 处理邻居索引(按距离排序 + 排除自身)sorted_indices = []for i in range(len(indices)):if len(indices[i]) == 0:sorted_indices.append(np.array([]))continue# 按距离排序并排除自身sorted_order = np.argsort(distances[i])neigh_indices = indices[i][sorted_order]mask = (neigh_indices != i)filtered_indices = neigh_indices[mask]sorted_indices.append(filtered_indices)# Step 3: 计算窗口和(处理稀疏区域)def compute_window_sums(sorted_indices, values):windows = []for idx in range(len(sorted_indices)):neighbors = sorted_indices[idx]if len(neighbors) == 0:# 稀疏区域处理:使用自身类型填充window_sum = values[idx] # 自身类型else:window_sum = values[neighbors].sum(axis=0)# 归一化为比例分布window_sum_norm = window_sum / (window_sum.sum() + 1e-6) # 防止零除windows.append(window_sum_norm)return np.array(windows)windows = compute_window_sums(sorted_indices, values)# Step 4: 聚类邻域类型km = MiniBatchKMeans(n_clusters=n_clusters, random_state=0)labels = km.fit_predict(windows)adata.obs[f'CNs_{n_clusters}'] = [f'CN{i}' for i in labels]# 可视化 Fold Changek_centroids = km.cluster_centers_tissue_avgs = values.mean(axis=0)fc = np.log2((k_centroids + 1e-6) / (tissue_avgs + 1e-6)) # 避免零除fc_df = pd.DataFrame(fc, columns=cluster_cols)fc_df.index = [f'CN{i}' for i in range(n_clusters)]sns.set_style("white")g = sns.clustermap(fc_df, vmin=-2, vmax=2, cmap="vlag", row_cluster=False, col_cluster=True, linewidths=0.5, figsize=(6, 6))g.ax_heatmap.tick_params(right=False, bottom=False)library_names = adata.obs['sample'].drop_duplicates()for library in library_names:with rc_context({'figure.figsize': (8, 8)}):sq.pl.spatial_scatter(adata[adata.obs['sample'] == library,:],library_id=library,color=[f'CNs_{n_clusters}'],title=f'{library} CNs',shape=None,size=1,img=True,img_alpha=0.5,use_raw=True,frameon=False)return adata




相关文章:
Xenium | 细胞邻域(Cellular Neighborhood)分析(fixed radius)
上节我们介绍了空间转录组数据分析中常见的细胞邻域分析,CN计算过程中定义是否为细胞邻居的方法有两种,一种是上节我们使用固定K最近邻方法(fixed k-nearest neighbors)定义细胞Neighborhood,今天我们介绍另外一种固定半径范围内(fixed radiu…...
Python:爬虫概念与分类
网络请求: https://www.baidu.com url——统一资源定位符 请求过程: 客户端,指web浏览器向服务器发送请求 请求:请求网址(request url);请求方法(request methods);请求头(request header)&…...
[Linux实战] Linux设备树原理与应用详解
Linux设备树原理与应用详解 一、设备树概述 1.1 什么是设备树 设备树(Device Tree,简称DT)是一种描述硬件资源的数据结构,它通过一种树状结构来描述系统硬件配置,包括CPU、内存、总线、外设等硬件信息。设备树最初在…...
用Nginx实现负载均衡与高可用架构(整合Keepalived)
前言 在分布式架构中,负载均衡和高可用是保障系统稳定性的两大核心能力。本文将深入讲解如何通过Nginx实现七层负载均衡,并结合Keepalived构建无单点故障的高可用架构。文末附完整配置模板! 一、Nginx负载均衡实现方案 1. 核心原理 Nginx通…...
SQLMesh调度系统深度解析:内置调度与Airflow集成实践
本文系统解析SQLMesh的两种核心调度方案:内置调度器与Apache Airflow集成。通过对比两者的适用场景、架构设计和操作流程,为企业构建可靠的数据分析流水线提供技术参考。重点内容包括: 内置调度器的轻量级部署与性能优化策略Airflow集成的端到…...
Excel 中 INDEX 和 VLOOKUP 的对比
INDEX 和 VLOOKUP 都是 Excel 中常用的查找函数,但它们的用途和灵活性有所不同。 1. 相同点 均可用于查找数据:都能根据某个条件返回目标值。 支持精确匹配:均可使用 0 或 FALSE 进行精确匹配。 2. 不同点 特性VLOOKUPINDEX MATCH查找方向…...
Multism TL494仿真异常
仿真模型如下:开关频率少了一半,而且带不动负载,有兄弟知道为什么吗 这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码…...
基于 Trae 的超轻量级前端架构设计与性能优化实践
一、技术背景与选型动因 在单页应用(SPA)复杂度指数级增长的今天,传统框架在千级列表渲染场景下普遍存在首屏延迟(>1.5s)、内存占用过高(>200MB)等问题。基于对 Webpack Bundle Analyzer 的长期观察,我们发现核心问题集中在: • 类组件…...
算法练习(队列)
队列 单向队列 1. 定义一个队列 Queue<Integer> q new LinkedList<>(); Queue<Character> q new LinkedList<>();2. 入队列 q.offer(1); q.offer(2); // 从队尾入队列 q.add();3. 出队列 q.poll() // 从队头出队列,并将删除的元素…...
HarmonyOS NEXT开发进阶(十五):日志打印 hilog 与 console.log 的区别
文章目录 一、前言二、两者区别对比三、HiLog 详解四、拓展阅读 一、前言 在日常开发阶段,日志打印是调试程序非常常用的操作,在鸿蒙的官方文档中介绍了hilog这种方式,前端转过来的开发者发现console.log也可以进行日志打印,而且…...
【差分隐私相关概念】差分隐私中的稀疏向量技术
差分隐私中的稀疏向量技术(Sparse Vector Technique, SVT) 稀疏向量技术(SVT)是差分隐私中的一种高效机制,专用于处理稀疏高影响查询的场景。其核心思想是:当面对大量查询时,仅对其中“显著超过…...
快速幂算法还有用吗?——从内置函数到高性能计算的深度解析
博主在学习过程中遇到了一个疑问,既然C语言中有内置函数pow,那为什么还需要算法思想中的快速幂算法呢?下面将会讲解快速幂算法在特定场景下依然非常有用,具体原因如下: 目录 1. 精度与整数运算 2. 性能对比 3. 应用场…...
开源测试用例管理平台
不可错过的10个开源测试用例管理平台: PingCode、TestLink、Kiwi TCMS、Squash TM、FitNesse、Tuleap、Robot Framework、SpecFlow、TestMaster、Nitrate。 开源测试用例管理工具提供了一种透明、灵活的解决方案,使团队能够在不受限的情况下适应具体的测…...
vue 权限应用
目录 一、系统菜单栏权限 二、系统页面按钮权限 在企业开发中,不同的用户所扮演的角色不一样,角色拥有权限,所以用户拥有角色,就会有角色对应的权限。例如,张三是系统管理员角色,登录后就拥有整个系统的…...
鸿蒙HarmonyOS NEXT设备升级应用数据迁移流程
数据迁移是什么 什么是数据迁移,对用户来讲就是本地数据的迁移,终端设备从HarmonyOS 3.1 Release API 9及之前版本(单框架)迁移到HarmonyOS NEXT(双框架)后保证本地数据不丢失。例如,我在某APP…...
利用 PCI-Express 交换机实现面向未来的推理服务器
在数据中心系统的历史上,没有比被 Nvidia 选为其 AI 系统的组件供应商更高的赞誉了。 这就是为什么新兴的互连芯片制造商 Astera Labs 感到十分高兴,因为该公司正在 PCI-Express 交换机、PCI-Express 重定时器和 CXL 内存控制器方面与 Broadcom 和 Marv…...
Python调用手机摄像头检测火焰烟雾的三种方法
方法1:使用IP摄像头应用 OpenCV 1. 在手机上安装IP摄像头应用(如IP Webcam for Android) 2. 配置应用并启动服务器 3. 在Python中使用OpenCV连接 import cv2 import numpy as np # 手机IP摄像头URL(替换为你的手机IP和端口…...
Python if else while for 学习笔记
一.if,else if语句用于根据条件执行代码块 else语句可与if语句结合,当if判断为假时执行else语句 x10 if x>5:print("x大于5") y3 if y>5:print("y大于5") else:print("y小于等于5")结果: 二.while循环…...
正则化是什么?
正则化(Regularization)是机器学习中用于防止模型过拟合(Overfitting)的一种技术,通过在模型训练过程中引入额外的约束或惩罚项,降低模型的复杂度,从而提高其泛化能力(即在未见数据上…...
搜索-BFS
马上蓝桥杯了,最近刷了广搜,感觉挺有意思的,广搜题类型都差不多,模板也一样,大家写的时候可以直接套模板 这里给大家讲一个比较经典的广搜题-迷宫 题目问问能否走到 (n,m) 位置,假设最后一个点是我们的&…...
《边缘计算风云录:FPGA与MCU的算力之争》
点击下面图片带您领略全新的嵌入式学习路线 🔥爆款热榜 88万阅读 1.6万收藏 文章目录 **第一章:边城烽烟——数据洪流压境****第二章:寒铁剑匣——FPGA的千机变****第三章:枯木禅杖——MCU的至简道****第四章:双生契…...
R-GCN-Modeling Relational Data with GraphConvolutional Networks(论文笔记)
CCF等级:B 发布时间:2018年6月 25年3月31日交 目录 一、简介 二、原理 1.整体 2.信息交换与更新 2.1基分解 2.2块对角矩阵 3.实体分类或链接预测 3.1实体分类 3.2链接预测 三、结论和未来工作 一、简介 RGCN通过允许不同关系类型之间的信息…...
蓝桥杯第十六届模拟赛——基础细节考频分析
文章目录 前言一、STL函数二、日期问题三、质数与约数四、基本常识总结 前言 一、STL函数 #include< cmath > 详解floor函数、ceil函数和round函数 1.floor() 功能:把一个小数向下取整如果数是2.2 ,那向下取整的结果就为2.000000如果数是-2.2 &…...
【C++初阶】----模板初阶
1.泛型函数 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。 2.函数模板 2.1函数模板的概念 函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型…...
PyCharm操作基础指南
一、安装与配置 1. 版本选择 专业版:支持 Web 开发(Django/Flask)、数据库工具、科学计算等(需付费)。 社区版:免费,适合纯 Python 开发。 2. 安装步骤 访问 JetBrains 官网 下载对应版本。…...
Pycharm(七):几个简单案例
一.剪刀石头布 需求:和电脑玩剪刀石头布游戏 考察点:1.随机数;2.判断语句 import random # numrandom.randint(1,3) # print(num) # print(**30) #1.录入玩家手势 playerint(input(请输入手势:(1.剪刀 2.石头 3&…...
Android并发编程:线程池与协程的核心区别与最佳实践指南
1. 基本概念对比 特性 线程池 (ThreadPool) 协程 (Coroutine) 本质 Java线程管理机制 Kotlin轻量级并发框架 最小执行单元 线程(Thread) 协程(Coroutine) 创建开销 较高(需分配系统线程资源) 极低(用户态调度) 并发模型 基于线程的抢占式调度 基于协程的协作式调度 2. 核心差异…...
MySQL内存使用率高问题排查与解决方案:
目录标题 **一、问题现象****二、核心排查步骤****1. 参数检查****2. 内存使用分析****3. 存储过程/函数/视图检查****4. 操作系统级检查** **三、解决方案****1. 调整MySQL配置****2. 关闭透明大页(THP)****3. 优化查询与存储过程****4. 硬件与环境优化…...
gnvm切换node版本号
1. gnvm下载官网 GNVM - Node.js version manager on Windows by Go 2. 安装 2.1 不存在 Node.js 环境 下载并解压缩 gnvm.exe 保存到任意文件夹,并将此文件夹加入到环境变量 Path。 2.2 存在 Node.js 环境 下载并解压缩 gnvm.exe 保存到 Node.js 所在的文件夹。 2.…...
PyTorch 深度学习实战(29):目标检测与 YOLOv12 实战
在上一篇文章中,我们探讨了对比学习与自监督表示学习。本文将深入计算机视觉的核心任务之一——目标检测,重点介绍最新的 YOLOv12 (You Only Look Once v12) 算法。我们将使用 PyTorch 实现 YOLOv12 模型,并在 COCO 数据集上进行训练和评估。…...
