将数组以二进制格式保存
数组可以以未压缩的原始二进制格式保存在扩展名为.npy的文件中的,npy文件中会在第一行保存数组的相关信息
npz是一个可以保存多个数组的归档文件,该文件可以是未压缩的,也可以是压缩的。解压npz文件可以发现多个数组对应的npy文件。
当使用load方法去打开npz文件时,会返回一个类似字典的对象,可以用访问字典键值的方式去访问数组。
>>>#将数组保存在x.npy文件中
>>> np.save('x.npy',np.arange(4))
>>> np.load('x.npy')
array([0, 1, 2, 3])
>>>#---------------------------------------------
>>>#将多个数组保存在npz文件中
>>> np.savez('ab.npz',a=x1,b=x2)
>>>#加载npz文件,返回一个类似字典的对象
>>> arch=np.load('ab.npz')
>>> arch['a']
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> arch['b']
array([0, 1, 2])
a = np.arange(100000).reshape(1000, 100)
a[10: 300] = 0
b = np.arange(100000).reshape(1000, 100)
np.save('a.npy', a) # 文件大小:391KB
np.save('b.npy', b) # 文件大小:391KB
# 保存到不压缩的npz文件
np.savez('ab_uncompressed.npz', a=a, b=b) # 文件大小:782KB
# 保存到压缩的npz文件
np.savez_compressed('ab_compressed.npz', a=a, b=b) # 文件大小:232KB
存取文本文件(一维或者二维的数组)
np.savetxt(frame,array,fmt='%.18e',delimiter=None)
frame:文件名
array:写入文件的数组
fmt:写入文件的格式,比如%d,%.2f
delimter:分隔符
np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)
frame:文件名
dtype:数据类型
delimter:分隔符
unpack:读入属性写入不同变量
data.csv
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
5 | 6 | 7 | 10 |
a.csv
0 | 1 | 2 | 3 |
4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 |
>>>#加载data.csv
>>> np.loadtxt('data.csv',delimiter=',')
array([[ 1., 2., 3., 4.],
[ 5., 6., 7., 8.],
[ 5., 6., 7., 10.]])
>>>#读到csv文件中
>>> a=np.arange(12).reshape(3,4)
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> np.savetxt('a.csv',a,fmt='%d',delimiter=',')
存取二维以上的数组
写入数组:
使用该方法会丢失数组的维度信息,若要保存数组的信息,需要用npy文件
a.tofile(frame,sep='',format='%s')
a:数组
frame:文件
sep:分隔符,如果是空串,则写入文件形式为二进制
format:写入文件格式
>>> a=np.arange(100).reshape(5,10,2)
>>>#将数组a写入a.txt,分隔符隔开,不会用换行体现维度
>>> a.tofile('a.txt',sep=',')
>>>#将数组以二进制形式存入b,txt
>>> a.tofile('b.txt')
a.txt:
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,
58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,
85,86,87,88,89,90,91,92,93,94,95,96,97,98,99
b.txt:
! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c
读取解析数组:
np.fromfile(frame,dtype=float,count=-1,sep='')
frame:文件
dtype:读取的数据类型
count:读入元素的个数,-1表示全部
sep:分隔符,如果是空串,则表示二进制形式
>>>#读取矩阵a
>>> np.fromfile('a.txt',dtype=np.int,sep=',')
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])
>>> np.fromfile('a.txt',dtype=np.int,sep=',').reshape(5,10,2)
>>>#读取二进制形式的矩阵a
>>> np.fromfile('b.txt',dtype=np.int)
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])