上一篇中我们简要带过了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