如何读取`bsb compile`生成的网络模型中的细胞位置?
读取BSB生成的HDF5文件中细胞位置的方法
1. 先探查HDF5文件结构
要找到细胞位置的存储路径,先确认文件内的数据集分布:
- 命令行方式:用
h5ls工具递归列出所有内容,命令如下:
输出里找带h5ls -r your_compiled_output.h5positions的条目,这就是细胞位置的数据集路径。 - Python遍历方式:如果没有
h5ls,用h5py打开文件后遍历结构:import h5py with h5py.File("your_compiled_output.h5", "r") as f: def traverse(name, obj): if isinstance(obj, h5py.Dataset): print(f"[数据集] {name} | 形状: {obj.shape}") else: print(f"[组] {name}") f.visititems(traverse)
2. 提取细胞位置数据
首先安装依赖库h5py:
pip install h5py
然后根据找到的路径提取数据,示例代码:
import h5py import numpy as np # 替换为你的HDF5文件名 h5_file_path = "your_compiled_output.h5" # 替换为你探查得到的细胞位置数据集路径,比如/cells/pyramidal/positions position_dataset_path = "/cells/your_cell_type/positions" with h5py.File(h5_file_path, "r") as f: # 读取位置数据,返回numpy数组 cell_positions = f[position_dataset_path][:] # 打印前5个细胞的坐标示例 print("部分细胞位置坐标:") print(cell_positions[:5])
3. BSB文件的常见路径规律
BSB编译的HDF5文件中,细胞位置通常按细胞种群分组存储,路径格式为/cells/<cell_population_name>/positions,其中<cell_population_name>是你在JSON配置文件中定义的细胞种群名称。每种细胞类型对应一个独立的子组。
4. 数据后处理示例
提取到的位置一般是N×3的numpy数组(N为细胞数量,3对应x/y/z三维坐标),可以直接用numpy做筛选或计算:
# 筛选z坐标在0到100之间的细胞 filtered_cells = cell_positions[(cell_positions[:, 2] > 0) & (cell_positions[:, 2] < 100)] # 计算所有细胞的平均位置 mean_position = np.mean(cell_positions, axis=0)
内容的提问来源于stack exchange,提问作者Robin De Schepper
相关产品推荐
相关产品推荐

