四时宝库

程序员的知识宝库

一起学数据分析之NumPy(13)——用于数组的文件输入输出

import numpy as np

NumPy能够读写磁盘上的文本数据或二进制数据。当然pandas库中也有一些用于将表格型数据读取到内存中的工具,我们后面也会接触到。

将数组以二进制格式保存到磁盘

np.save和np.load是读写磁盘数组数据的两个主要函数。默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中的。

In [3]:

arr = np.arange(10)
np.save('arr', arr)

如果文件路径末尾没有扩展名.npy,系统会自动加上这个扩展名。然后我们就可以通过np.load读取磁盘上的数组:

In [4]:

np.load('arr.npy')

Out[4]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

我们还可以通过np.savez函数将多个数组保存到一个压缩文件中,将数组以关键字参数的形式传入即可:

In [5]:

np.savez('arrs.npz',a=arr,b=arr)

加载.npz文件时,你会得到一个类似字典的对象,该对象会对各个数组进行延迟加载:

In [6]:

arch = np.load('arrs.npz')

In [7]:

arch['a']

Out[7]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [8]:

arch['b']

Out[8]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

存取文本文件

从文件中加载文本是一个非常常见的任务。有时我们需要用np.loadtxt或更为专门化的np.genfromtxt将数据加载到普通的NumPy数组中。 这些函数都有许多选项可以使用:指定各种分隔符、针对特定列的转换器函数、需要跳过的行数。一个简单的逗号分隔文件(CSV)为例:

array_ex.txt

In [11]:

!type array_ex.txt #linux请用!cat
0.580052,0.185730,1.040717,1.134411
0.194163,-0.636917,-0.938659,0.124094
-0.126410,0.268607,-0.695724,0.047428
-1.4844132,0.004176,-0.744203,0.005487
2.302869,0.200131,1.670238,-1.881090
-0.193230,1.047233,0.482803,0.960334

该文件可以被加载到一个二维数组中,如下所示:

In [12]:

arr = np.loadtxt('array_ex.txt',delimiter=',')
arr

Out[12]:

array([[ 0.580052 ,  0.18573  ,  1.040717 ,  1.134411 ],
       [ 0.194163 , -0.636917 , -0.938659 ,  0.124094 ],
       [-0.12641  ,  0.268607 , -0.695724 ,  0.047428 ],
       [-1.4844132,  0.004176 , -0.744203 ,  0.005487 ],
       [ 2.302869 ,  0.200131 ,  1.670238 , -1.88109  ],
       [-0.19323  ,  1.047233 ,  0.482803 ,  0.960334 ]])

np.savetxt执行的是相反的操作:将数组写到以某种分隔符隔开的文本文件中。

genfromtxt跟loadtxt差不多,只不过它面向的是结构化数组和缺失数据处理。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接