运行 到目录中的 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_df
和 table1
并且只使用 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)
我目前已经通过目录中的所有 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_df
和 table1
并且只使用 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)