如何用Python处理4列TXT数据集生成按X坐标汇总的一维直方图?
解决方案
你不需要用np.histogramdd,这个函数是用来做多维区间直方图的,和你要的「按原始x值分组求和」需求不匹配。直接用以下两种简单方法即可:
方法一:纯Numpy实现
import numpy as np # 读取文本文件 data = np.loadtxt("your_data.txt") x_coords = data[:, 0] values = data[:, 3] # 获取唯一的x值,以及每个x对应的索引 unique_x, idx = np.unique(x_coords, return_inverse=True) # 按索引对values加权求和 total_per_x = np.bincount(idx, weights=values) # 结果:unique_x是横轴的x值,total_per_x是对应总和 print("x值:", unique_x) print("对应总和:", total_per_x) # 示例输出: # x值: [0. 1.] # 对应总和: [60000. 90000.]
方法二:Pandas实现(更直观)
import pandas as pd # 读取数据,分隔符为空格,无表头 df = pd.read_csv("your_data.txt", sep=" ", header=None) # 按第0列(x坐标)分组,对第3列(数值)求和 sum_result = df.groupby(0)[3].sum() # 提取结果 unique_x = sum_result.index.to_numpy() total_per_x = sum_result.to_numpy() print("x值:", unique_x) print("对应总和:", total_per_x)
为什么np.histogramdd不适用?
你之前用np.histogramdd得到4维张量,应该是误将4列全部作为坐标输入了(正确用法是仅传入前3列x/y/z作为坐标,第4列作为weights参数)。即便用法正确,histogramdd默认会把每个维度分成10个区间(bins=10),它统计的是区间内的加权和,而不是按你原始的离散x值分组求和,所以不符合你的需求。
内容的提问来源于stack exchange,提问作者velenos14
相关产品推荐
相关产品推荐

