【发布时间】:2018-06-19 07:31:57
【问题描述】:
我有一个包含 5 个组的 h5 文件,每个组包含一个 3D 数据集。我正在寻找一个 for 循环,允许我将每个组提取到一个 numpy 数组中,并将 numpy 数组分配给一个具有组头名称的对象。我能够获得许多不同的方法来处理一个组,但是当我尝试构建一个适用于所有 5 个组的代码的 for 循环时,它会中断。例如:
import h5py as h5
import numpy as np
f = h5.File("FFM0012.h5", "r+") #read in h5 file
print(list(f.keys())) #['FFM', 'Image'] for my dataset
FFM = f['FFM'] #Generate object with all 5 groups
print(list(FFM.keys())) #['Amp', 'Drive', 'Phase', 'Raw', 'Zsnsr'] for my dataset
Amp = FFM['Amp'] #Generate object for 1 group
Amp = np.array(Amp) #Turn into numpy array, this works.
现在,当我尝试使用 for 循环应用相同的逻辑时:
h5_keys = []
FFM.visit(h5_keys.append) #Create list of group names ['Amp', 'Drive', 'Phase', 'Raw', 'Zsnsr']
for h5_key in h5_keys:
tmp = FFM[h5_key]
h5_key = np.array(tmp)
print(Amp[30,30,30]) #To check that array is populated
当我运行此代码时,我得到“NameError: name 'Amp' is not defined”。我尝试在 for 循环之前初始化 numpy 数组:
h5_keys = []
FFM.visit(h5_keys.append) #Create list of group names
Amp = np.array([])
for h5_key in h5_keys:
tmp = FFM[h5_key]
h5_key = np.array(tmp)
print(Amp[30,30,30]) #To check that array is populated
这会产生错误消息“IndexError: too many indices for array”
我也尝试过生成字典并从字典中创建 numpy 数组。这是一个类似的故事,我可以让代码为一个 h5 组工作,但是当我构建 for 循环时它就崩溃了。
欢迎提出任何建议!
【问题讨论】:
-
在您的第二次 sn-p 中,您永远不会创建 Amp。在您的第三个中,您永远不会为 Amp 分配任何东西。你习惯用matlab吗?与 Matlab 不同,变量不会从一次运行到下一次“停留”。如果您执行第一个 sn-p 代码,所有这些变量都会在执行结束时消失。