上节课讲述了 ndarray 的重塑、组合和拆分。

image

本节课讲述用于 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)

如果文件路径末尾没有扩展名 .npy,则该扩展名会被自动加上。执行完上述代码后,在代码的同级目录下会生成文件 my_arr1.npy。 从文件中读取数组:

import numpy as np

my_arr1 = np.load('my_arr1.npy')
print(my_arr1)

上述代码使用 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)

上述代码将 my_arr1my_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)

如果要将数据压缩,可以使用 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)

读取:

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)

3 总结

image