0
点赞
收藏
分享

微信扫一扫

Numpy - 数组的保存和读取

boomwu 2021-09-28 阅读 59

本节介绍的函数主要用来帮助我们完成数组的保存以及从文件加载 numpy 数组。

一. np.loadtxt、np.savetxt

首先,我们使用 Jupyter Notebook 中的魔法命令来写一个文件:

%%writefile example.txt
1 2 3 4
5 6 7 8
9 10 11 12

如果不使用 numpy 为我们提供的 API ,那么为了将文件中的内容读取到 numpy 数组,还是很费劲的:

data = []
with open('example.txt') as f:
    for line in f:
        fields = [float(x) for x in line.split()]
        data.append(fields)

然后将嵌套列表 data 转换为 ndarray 结构:

>> data
[[1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0], [9.0, 10.0, 11.0, 12.0]]
>> arr = np.array(data)
>> arr
array([[ 1.,  2.,  3.,  4.],
       [ 5.,  6.,  7.,  8.],
       [ 9., 10., 11., 12.]])

1.1 从文本文件读取数组

numpy 为我们提供了 np.loadtxt 方法,可以轻松地将 example.txt 文本文件中的内容读取到 ndarray

>> arr2 = np.loadtxt('example.txt')
>> arr2
array([[ 1.,  2.,  3.,  4.],
       [ 5.,  6.,  7.,  8.],
       [ 9., 10., 11., 12.]])

example.txt 文件中每行中的数字使用空格作为分隔符,如果是其它分隔符,可以在 loadtxt 中使用 delimiter 指定分隔符。

%%writefile example2.txt
0,1,2,3
4,5,6,7
8,9,10,11

读取 example2.txt

>> np.loadtxt('example2.txt', delimiter=',')
array([[ 0.,  1.,  2.,  3.],
       [ 4.,  5.,  6.,  7.],
       [ 8.,  9., 10., 11.]])

此外,还可以使用 skiprows 说明在读取时跳过前 n 行内容:

%%writefile example3.txt
a,b,c
0,1,2
3,4,5

跳过 1 行开始读取:

>> np.loadtxt('example3.txt', delimiter=',', skiprows=1)
array([[0., 1., 2.],
       [3., 4., 5.]])

使用 usecols 读取指定的列到 ndarray :

>> np.loadtxt('example2.txt', delimiter=',', usecols=(0,2))
array([[ 0.,  2.],
       [ 4.,  6.],
       [ 8., 10.]])

1.2 将数组保存到文本文件

>> arr = np.arange(9).reshape(3,3)
>> arr
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

使用 np.savetxt 将数组保存到文本文件:

>> np.savetxt('arr1.txt', arr)

默认保存的格式是科学计数法,分隔符为空格。下面使用 delimiterfmt 来指定保存的分隔符和格式:

>> np.savetxt('arr2.txt', arr, delimiter=',', fmt='%.2f')

>> np.savetxt('arr3.txt', arr, delimiter=',', fmt='%d')

二. np.save、np.savez、np.load

除了将 ndarray 数组保存到文本文件之外,还可以使用 np.save 直接保存数组结构:

>> arr
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>> np.save('arr.npy', arr)

使用 np.load 读取上述保存的数组结构:

>> np.load('arr.npy')
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

使用 np.savenp.load 直接保存和读取 ndarray 是不是相比保存文件文件和从文本文件读取,省去了不少麻烦呢~

此外,还可以使用 np.savez 来将多个 ndarray 保存到一个文件,保存的文件类似压缩包的格式,里面包含了 ndarray 持久化的多个文件。

>> arr2 = np.ones_like(arr)
>> arr2
array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]])
>> np.savez('arrs.npz', arr1=arr, arr2=arr2)

读取 arrs.npz 中保存的多个数组:

>> data = np.load('arrs.npz')
>> data
<numpy.lib.npyio.NpzFile at 0x154a47db198>
>> data.keys()
KeysView(<numpy.lib.npyio.NpzFile object at 0x00000154A47DB198>)
>> data['arr1']
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>> data['arr2']
array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]])
举报

相关推荐

0 条评论