本文最后更新于 258 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com
数组的读写
数组支持方便的读写操作。
数组的读取
import numpy as np
可以用函数np.loadtxt()从文本文件中读取数据。假设有这样的一个文件myfile.txt,内容为:
%%writefile myfile.txt
2.1 2.3 3.2 1.3 3.1
6.1 3.1 4.2 2.3 1.8
Writing myfile.txt
np.loadtxt('myfile.txt')
array([[2.1, 2.3, 3.2, 1.3, 3.1],
[6.1, 3.1, 4.2, 2.3, 1.8]])
默认文件中的数据是空格分割,如果分割符不是空格,则可以通过参数指定:
%%writefile myfile.txt
2.1, 2.3, 3.2, 1.3, 3.1
6.1, 3.1, 4.2, 2.3, 1.8
Overwriting myfile.txt
np.loadtxt('myfile.txt', delimiter=',')
array([[2.1, 2.3, 3.2, 1.3, 3.1],
[6.1, 3.1, 4.2, 2.3, 1.8]])
数组的二进制读写
直接读写文本方式不如使用二进制读写速度快效率高。可以将数组存储成二进制格式,并进行读取。
用于保存数组的函数有:
np.save(file_name, arr)
:保存单个数组,.npy格式。np.savez(file_name, *args, **kwds)
:保存多个数组,无压缩的.npz格式。
用于读取数组的函数为:np.load(file_name)
:对于.npy文件,返回保存的数组;对于.npz文件,返回一个名称-数组对组成的字典。
考虑以下两个数组:
a = np.ones((2, 3))
b = np.zeros(3)
单个数组可以用np.save()
保存,并用np.load()
函数读取,读取后,返回一个数组:
np.save("data", a)
np.load("data.npy")
array([[1., 1., 1.],
[1., 1., 1.]])
多个数组可以用np.savez()
和np.load()
函数读写。np.savez()
函数支持两种模式保存多个数组,第一种是*arg
模式:
np.savez("dataall", a, b)
data = np.load("dataall.npz")
data
当np.load()
函数读取保存的多个数组时,函数会返回一个字典。在*arg
模式下,这些数组对应的键会被自动命名为arr_数字
的形式,其中的数字按照保存的顺序,从0开始,因此,用键arr_0
索引得到的数组是a,arr_1
索引得到的数组是b:
for k in data:
print(k, data[k])
arr_0 [[1. 1. 1.]
[1. 1. 1.]]
arr_1 [0. 0. 0.]
第二种是**kwds
模式:
np.savez("dataall", x=a, y=b)
data = np.load("dataall.npz")
此时索引的字典是保存时传入的参数:
for k in data:
print(k, data[k])
x [[1. 1. 1.]
[1. 1. 1.]]
y [0. 0. 0.]
删除生成的文件:
%rm myfile.txt data.npy dataall.npz