You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:45:38