保存列表
list_data为一个由多个数组或多个列表或多个数组和列表组成的列表,将其保存为npz文件的方式:
import numpy as np
np.savez('list_data',list_data)
当前路径下会生成一个list_data.npz的文件。
读取列表
将由多个数组或多个列表或多个数组和列表组成的.npz文件读取并恢复的方式:
import numpy as np
list_in = np.load('list_data.npz')
print(list_in.files) # 查看各个数组名称
arr_0 = list_in['arr_0']#object 只读
打印结果:
['arr_0']
接着执行:
arr_0 = list_in['arr_0']#object 只读
这是会发现报错:
ValueError: Object arrays cannot be loaded when allow_pickle=False
需要使用如下命令执行:
import numpy as np
list_in = np.load('list_data.npz',allow_pickle=True)
print(list_in.files) # 查看各个数组名称
arr_0 = list_in['arr_0']#object 只读
利用如下方式即可将list恢复成原来的类型:
list_o= []
for i in arr_0:
list_o.append(i)
完整代码如下:
def npz2list(path):
#保存列表
#numpy.savez('list1',list_in)
list1 = np.load(path,allow_pickle=True)
#print(list1.files) # 查看各个数组名称
arr_0 = list1['arr_0']#object 只读
list_o= []
for i in arr_0:
list_o.append(i)
return list_o
#注意:若使用如下方式加载npz文件会报错:
#list1 = np.load("test_out/list1.npz")
#arr_0 = list1['arr_0']
#报错信息
#ValueError: Object arrays cannot be loaded when allow_pickle=False
参考:Python教程:NumPy IO
numpy.savez() 函数将多个数组保存到以 npz 为扩展名的文件中。
numpy.savez(file, *args, **kwds)
参数说明:
- file:要保存的文件,扩展名为 .npz,如果文件路径末尾没有扩展名 .npz,该扩展名会被自动加上
- args: 要保存的数组,可以使用关键字参数为数组起一个名字,非关键字参数传递的数组会自动起名为 arr_0, arr_1, … 。
- kwds: 要保存的数组使用关键字名称。
实例
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = np.arange(0, 1.0, 0.1)
c = np.sin(b)
# c 使用了关键字参数 sin_array
#将数组保存为.npz文件
np.savez("runoob.npz", a, b, sin_array = c)
#加载.npz文件
r = np.load("runoob.npz")
print(r.files) # 查看各个数组名称
print(r["arr_0"]) # 数组 a
print(r["arr_1"]) # 数组 b
print(r["sin_array"]) # 数组 c
输出结果为:
['sin_array', 'arr_0', 'arr_1']
[[1 2 3]
[4 5 6]]
[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
[0. 0.09983342 0.19866933 0.29552021 0.38941834 0.47942554
0.56464247 0.64421769 0.71735609 0.78332691]