保存一个三阶张量序列并回读而不会丢失数组格式

时间:2019-04-23 12:33:53

标签: python numpy serialization deserialization

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()命令来取回原始对象。但是我可以更快或更优雅地做到这一点吗?

1 个答案:

答案 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]])} 时给出一些合理的键。