上节课讲述了 ndarray 的重塑、组合和拆分。 本节课讲述用于 ndarray 的文件操作。我们可以使用 numpy 提供的方法将 ndarray 存储到文件,还可以从存储 ndarray 的文件中读取 ndarray。
# 1 单个数组的读写
np.save() 和 np.load() 是读写磁盘数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npy 的文件中的。例如: 将数组写到文件中:
import numpy as np
my_arr1 = np.arange(0, 16).reshape((4, 4))
np.save('my_arr1', my_arr1)
1
2
3
4
2
3
4
如果文件路径末尾没有扩展名 .npy,则该扩展名会被自动加上。执行完上述代码后,在代码的同级目录下会生成文件 my_arr1.npy
。
从文件中读取数组:
import numpy as np
my_arr1 = np.load('my_arr1.npy')
print(my_arr1)
1
2
3
4
2
3
4
上述代码使用 load() 函数从文件中读取了存入的数组。
# 2 多个数组的读写
通过 np.savez() 可以将多个数组保存到一个未压缩文件中,将数组以关键字参数的形式传入即可,例如:
import numpy as np
my_arr1 = np.arange(16).reshape((4,4))
my_arr2 = np.random.randn(16).reshape((4,4))
np.savez('array_archive.npz', my_arr1 = my_arr1, my_arr2 = my_arr2)
1
2
3
4
5
6
2
3
4
5
6
上述代码将 my_arr1
和 my_arr2
同时存入了 array_archive.npz
中。
加载 .npz 文件时,会得到一个类似字典的对象,该对象会对各个数组进行延迟加载,也就是说只有在使用某个数组时才会进行加载,例如:
import numpy as np
arch = np.load('array_archive.npz')
my_arr1 = arch['my_arr1']
my_arr2 = arch['my_arr2']
print(my_arr1)
print(my_arr2)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
如果要将数据压缩,可以使用 numpy.savez_compressed() 函数,例如: 写入:
import numpy as np
my_arr1 = np.arange(16).reshape((4,4))
my_arr2 = np.random.randn(16).reshape((4,4))
np.savez_compressed('arrays_compressed.npz', my_arr1 = my_arr1, my_arr2 = my_arr2)
1
2
3
4
5
6
2
3
4
5
6
读取:
import numpy as np
arch = np.load('arrays_compressed.npz')
my_arr1 = arch['my_arr1']
my_arr2 = arch['my_arr2']
print(my_arr1)
print(my_arr2)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 3 总结
# 4.练习题
使用 arange 创建一个 4*4
的 ndarray,将此 ndarray 保存到文件,并从文件中读取此 ndarray。