Python如何将直方图分箱计数数据按指定格式写入.dat文件
粒子分布直方图数据写入指定格式.dat文件方法
直接对numpy返回的hist数组做str()转换写入,会自带numpy数组的打印格式:方括号、对齐用的多余空格,自然不符合要求,按下面的逻辑写就能完全匹配目标格式:
- 先写入文件首行头信息,四个值按顺序为:数据点数、采样区间下界、采样区间上界、分箱数量,写完加换行。
- 逐时间步计算直方图时,必须给
np.histogram传入固定的range参数,保证所有时间步的分箱边界完全一致,不然做动画的时候分箱会随每帧分布漂移。 - 每个时间步的行,先放当前时间步的值,再按顺序放对应数量分箱的计数,所有数值转成字符串后用单个空格拼接,末尾加换行写入即可,不要直接把整个hist数组转字符串。
可直接复用的参考代码:
import numpy as np # 按你的实际需求修改这几个配置参数 data_point_num = 10 bin_count = 10 range_lower = -1 range_upper = 1 # 这里替换成你自己的时间步+对应粒子位置数据,格式为[(时间步值, 粒子位置数组), ...] step_dataset = [ (0.1, np.random.normal(0, 0.5, 10000)), (0.2, np.random.normal(0, 0.5, 10000)) ] with open('up.dat', 'w') as f: # 写入头行 f.write(f"{data_point_num} {range_lower} {range_upper} {bin_count}\n") # 逐时间步写入分布数据 for t_step, pos_arr in step_dataset: # 固定分箱范围计算计数 hist_counts, bin_edges = np.histogram( pos_arr, bins=bin_count, range=(range_lower, range_upper) ) # 拼接行内容:时间步 + 所有分箱计数 line_parts = [str(t_step)] + [str(c) for c in hist_counts] f.write(" ".join(line_parts) + "\n")
写出来的文件结构完全匹配给出的示例格式,不会带多余的括号或者缩进空格。
内容的提问来源于stack exchange,提问作者IAmOneWithTheScientist
相关产品推荐
相关产品推荐

