如何将 numpy 数组列表保存到单个文件中并将文件加载回原始形式

DVK*_*DVK 11 python numpy tensorflow tf.keras

我目前正在尝试将 numpy 数组列表保存到单个文件中,此类列表的示例可以采用以下形式

import numpy as np
np_list = []
for i in range(10):
    if i % 2 == 0:
        np_list.append(np.random.randn(64))
    else:
        np_list.append(np.random.randn(32, 64))
Run Code Online (Sandbox Code Playgroud)

我可以通过迭代列表将所有这些使用合并到一个文件中savez,但还有其他方法吗?我正在尝试保存函数返回的权重model.get_weights(),这是一个列表ndarray,在从保存的文件中检索权重后,我打算使用将这些权重加载到另一个模型中model.set_weights(np_list)。因此,列表的格式必须保持不变。如果有人有一种优雅的方式来做到这一点,请告诉我。

mar*_*cos 17

我会选择np.saveandnp.load因为它是平台无关的,比savetxt数组列表更快,例如:

import numpy as np

a = [
    np.arange(100),
    np.arange(200)
]
np.save('a.npy', np.array(a, dtype=object), allow_pickle=True)
b = np.load('a.npy', allow_pickle=True)
Run Code Online (Sandbox Code Playgroud)

这是np.savenp.load的文档。在这个答案中,您可以找到更好的讨论如何正确保存和加载 numpy.array() 数据?

编辑

就像@AlexP提到的那样,numpy >= v1.24.2不支持不同大小和类型的数组,所以这就是为什么需要进行转换。

  • 谨慎使用这种方法。`save` 将在保存之前执行 `np.array(a)`。所以 `b` 将是一个数组,而不是一个列表。正如其他人发现的那样,从数组列表创建数组有其隐藏的危险。不要天真地这样做。 (4认同)