以自动方式从多个数组中的npz文件加载多个numpy数组



我有一个npz文件,如下所示。

data = np.load('Data_5_iteration.npz') # Load data from file
keys = list(data.keys()) # all keys in the dictionary
print(keys)
(base) hell@hell:~$ ['nodes', 'temperature', 'max_iter', 'best_error_vec', 'best_u_pred', 'final_error_vec', 'final_u_pred', 'best_iter', 'PDE_loss_array', 'BC_loss_array', 'total_loss_array']

我想将所有这些numpy数组存储在与列表中相同名称的不同数组中,而不需要逐行写入。

例如,我不想写:

nodes = data[keys[0]]
temperature = data[keys[1]]
max_iter = data[keys[2]]
best_error_vec = data[keys[3]]
best_u_pred = data[keys[4]]
final_error_vec = data[keys[5]]
final_u_pred = data[keys[6]]
best_iter = data[keys[7]]
PDE_loss_array = data[keys[8]]
BC_loss_array = data[keys[9]]
total_loss_array = data[keys[10]]

我能用一些自动化的方法吗?

使用示例npz,我可以获得一个列表或dict:

In [42]: with np.load('data.npz') as f:
...:     alist = [(key,f[key]) for key in f]
...: 
In [43]: alist
Out[43]: [('fone', array(['t1', 't2', 't3'], dtype='<U2')), ('nval', array([1, 2, 3]))]
In [44]: with np.load('data.npz') as f:
...:     adict = {key:f[key] for key in f}
...: 
In [45]: adict
Out[45]: {'fone': array(['t1', 't2', 't3'], dtype='<U2'), 'nval': array([1, 2, 3])}

列表可以是unpacked,带有:

In [46]: fone, nval = alist
In [47]: fone
Out[47]: ('fone', array(['t1', 't2', 't3'], dtype='<U2'))

我们也可以使用dict方法在全局或本地命名空间中设置变量,但Python不鼓励这样做。

最新更新