运行 到目录中的 15 hdf5 以计算函数,但再次重复相同的 table

Running through 15 hdf5 in a directory to compute a function, but getting reiterations of the same table over again

我目前已经通过目录中的所有 hdf5 文件为 运行 编写代码,从文件中打印出 tables,为每个 table 绘制一个图形, 然后吐出每个曲线下的面积。这是代码。

import os
directory = '/Users/xx'

for filename in os.listdir(directory):
    if filename.endswith(".hdf5"):
        xdata = file.get('data')
        xdata= np.array(xdata)
        xdata_df = pd.DataFrame(xdata)
        table1 = pd.DataFrame(xdata_df).reset_index() 
        print(table1)
        x = table1["index"]
        y = table1[0]        
        plt.figure(figsize=(10, 10))
        plt.rcParams.update({'font.size': 20})
        figure1 = plt.plot(x, y)
        

        # Compute the area using the composite trapezoidal rule.
        area = trapz(y, dx=100000)
        print("trapz area =", area)

        # Compute the area using the composite Simpson's rule.
        area = simps(y, dx=100000)
        print("simpsons area =", area)
        continue
    else:
            continue

但是,我的代码似乎 运行 浏览了目录(15 个文件),但吐出了完全相同的 table 15 次,图形和曲线下的区域。有谁知道为什么会这样?

简答,要获得 Y 值,您应该使用 y = table1[1],而不是 y = table1[0]。您将值读作 x = table1["index"] - 您应该使用 x = table1[0]。另外,你知道你在调用 trpz()simps() 时没有使用 x 吗?您正在创建 2 个数据帧:xdata_dftable1 并且只使用 table1 - 为什么?如果您只需要 X/Y 数据,您可以直接从数据集中读取值(不需要数据帧)。

注意:上面的代码缺少 h5py.File() 打开 H5 文件。

最后,您可以按如下方式简化和清理代码:

for filename in glob.iglob(f'{directory}/*.hdf5'):
    with h5py.File(filename,'r') as file:
        xdata = file['data'][()]
        x = xdata[:,0] # or x = file['data'][:,0]
        y = xdata[:,1] # or y = file['data'][:,1]       

        # Compute the area using the composite trapezoidal rule.
        area = trapz(y, dx=100000)
        print("trapz area =", area)

        # Compute the area using the composite Simpson's rule.
        area = simps(y, dx=100000)
        print("simpsons area =", area)

或者,如果您更喜欢使用数据框:

for filename in glob.iglob(f'{directory}/*.hdf5'):
    with h5py.File(filename,'r') as file:
        xdata = file['data'][()]
        xdata_df = pd.DataFrame(xdata)
        table1 = pd.DataFrame(xdata_df).reset_index() 
        x = table1[0]
        y = table1[1]  

        # Compute the area using the composite trapezoidal rule.
        area = trapz(y, dx=100000)
        print("trapz area =", area)

        # Compute the area using the composite Simpson's rule.
        area = simps(y, dx=100000)
        print("simpsons area =", area)