上一篇中我们简要带过了Numpy的数据持久化,在这一篇中将要具体说明Numpy提供的文件存取功能。Numpy可以将数组保存至二进制文件、文本文件,同时支持将多个数组保存至一个文件中。
1. np.tofile() & np.fromfile()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import numpy as np
import os
os.chdir( "d:\\" )
a = np.arange( 0 , 12 )
a.reshape( 3 , 4 )
array([[ 0 , 1 , 2 , 3 ],
[ 4 , 5 , 6 , 7 ],
[ 8 , 9 , 10 , 11 ]])
a.tofile( "a.bin" ) #保存至a.bin
b = np.fromfile( "a.bin" , dtype = np.int32) #从文件中加载数组,错误的dtype会导致错误的结果
array([ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 ])
b.reshape( 3 , 4 )
array([[ 0 , 1 , 2 , 3 ],
[ 4 , 5 , 6 , 7 ],
[ 8 , 9 , 10 , 11 ]])
#读取的数据将为一维数组,需要使用reshape改变其数组结构
|
2. np.save() & np.load() & np.savez()
load()和save()用Numpy专用的二进制格式保存数据,它们会自动处理元素类型和形状等信息。savez()提供了将多个数组存储至一个文件的能力,调用load()方法返回的对象,可以使用数组名对各个数组进行读取。默认数组名arr_0,arr_1,arr_2......
1
2
3
4
5
6
|
np.save( "a.npy" , a.reshape( 3 , 4 ))
c = np.load( "a.npy" )
c
array([[ 0 , 1 , 2 , 3 ],
[ 4 , 5 , 6 , 7 ],
[ 8 , 9 , 10 , 11 ]])
|
多个数组存储至一个文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
a = np.array([[ 1 , 2 , 3 ],[ 4 , 5 , 6 ]])
b = np.arange( 0 , 1.0 , 0.1 )
c = np.sin(b)
np.savez( "result.npz" , a, b, sin_arr = c) #使用sin_arr命名数组c
r = np.load( "result.npz" ) #加载一次即可
r[ "arr_0" ]
array([[ 1 , 2 , 3 ],
[ 4 , 5 , 6 ]])
r[ "arr_1" ]
array([ 0. , 0.1 , 0.2 , 0.3 , 0.4 , 0.5 , 0.6 , 0.7 , 0.8 , 0.9 ])
r[ "sin_arr" ]
array([ 0. , 0.09983342 , 0.19866933 , 0.29552021 , 0.38941834 ,
0.47942554 , 0.56464247 , 0.64421769 , 0.71735609 , 0.78332691 ])
|
可以使用解压软件解压缩.npz文件会得到存储的各个数组对应的.npy文件以便进行遍历。
3. savetxt() & loadtxt()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
a = np.arange( 0 , 12 , 0.5 ).reshape( 4 , - 1 )
a
array([[ 0. , 0.5 , 1. , 1.5 , 2. , 2.5 ],
[ 3. , 3.5 , 4. , 4.5 , 5. , 5.5 ],
[ 6. , 6.5 , 7. , 7.5 , 8. , 8.5 ],
[ 9. , 9.5 , 10. , 10.5 , 11. , 11.5 ]])
np.savetxt( "a.txt" , a)
np.loadtxt( "a.txt" )
array([[ 0. , 0.5 , 1. , 1.5 , 2. , 2.5 ],
[ 3. , 3.5 , 4. , 4.5 , 5. , 5.5 ],
[ 6. , 6.5 , 7. , 7.5 , 8. , 8.5 ],
[ 9. , 9.5 , 10. , 10.5 , 11. , 11.5 ]])
np.savetxt( "a.txt" , a, fmt = "%d" , delimiter = "," ) #指定存储数据类型为整型,分隔符为,
np.loadtxt( "a.txt" , delimiter = ',' ) #以,分隔符读取
array([[ 0. , 0. , 1. , 1. , 2. , 2. ],
[ 3. , 3. , 4. , 4. , 5. , 5. ],
[ 6. , 6. , 7. , 7. , 8. , 8. ],
[ 9. , 9. , 10. , 10. , 11. , 11. ]])
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/AllStarGIS/p/3784937.html