上节课讲述了 ndarray 的重塑、组合和拆分。 image.png 本节课讲述用于 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

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

import numpy as np

my_arr1 = np.load('my_arr1.npy')
print(my_arr1)
1
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

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

读取:

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

# 3 总结

image.png

# 4.练习题

使用 arange 创建一个 4*4 的 ndarray,将此 ndarray 保存到文件,并从文件中读取此 ndarray。

更新于: 12/30/2021, 2:39:56 AM