我最近遇到了numpy.savez和numpy.savez_compresseed.两者似乎都能很好地处理不同类型的数组,包括对象array.但是,numpy.load不能很好地与对象类型数组配合使用.例如:
import numpy as np
numbers = np.full((10, 1), np.pi)
strings = np.full((10, 1), "letters", dtype=object)
np.savez("test.npz", numbers=numbers, strings=strings)
data = np.load("test.npz")
调用data["strings"]
会引发以下ValueError:
ValueError: Object arrays cannot be loaded when allow_pickle=False
但是,在numpy.load
上启用PICLE可以解决此问题.numpy.savez
和numpy.savez_compressed
文档中没有讨论Pickle……这让我想知道为什么需要Pickle来加载数据.numpy.savez
和numpy.savez_compressed
会在幕后自动使用泡菜吗?