Python 3.7,Numpy:我需要保存一个使用numpy创建的3阶对象。确切地说,它是一个数组列表。数组在加载后使用numpy.dot()矩阵乘以向量。有没有一种方法可以保存该对象(例如保存为.txt文件)而又不会丢失其格式?
如果我只是简单地使用.write()将对象放入.txt文件,则会将其转换为字符串。我当然可以将其转换回float数组,但是在此之前,我想知道是否有更简单或更有效的方法。
这看起来像这样:
BigObject = []
for i in (0, Size1):
BigObject.append(np.random.uniform(-1, 1, (Size2, Size3)))
with open("test.txt", "w+") as output:
output.write(str(BigObject))
我如何保存和
with open("test.txt", "r") as input:
NewBigObject = input.read()
我怎么读它。
这确实给了我一个NewBigObject
的字符串,我不能将它矩阵乘以一个向量。
BigArray的保存方式无关紧要。我只想知道是否存在一种保存格式而不丢失格式的聪明方法。现在,我可以运行一系列split()
和float()
命令来取回原始对象。但是我可以更快或更优雅地做到这一点吗?
答案 0 :(得分:1)
这是一种将数组保存为字典而不保存为500
的方法(因为将其保存为list会将所有数组连接到一个数组中,这是我们不想要的),然后将其加载回读取而不丢失数组格式。
list
以上内容将返回字典;然后,您可以遍历此字典并访问数组。如果愿意,可以在制作字典# sample array to work with
In [76]: arr = np.arange(12).reshape(4, 3)
# make a dict of say 4 copies of the array
In [77]: dict_of_arrs = {idx: arr for idx in range(4)}
# serialize it to disk; will be saved as `serialized_arrays.npy`
In [78]: np.save('serialized_arrays', dict_of_arrs)
# load it back for reading/processing
In [79]: loaded_arrs = np.load('serialized_arrays.npy')
# flatten it out and just take the 0th element in the list.
In [80]: loaded_arrs.ravel()[0]
Out[80]:
{0: array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]]), 1: array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]]), 2: array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]]), 3: array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])}
时给出一些合理的键。