python科学计算4 ndarray对象存取

1 数据存取

数组的数据存取把数组元素存到文件里面就行了,并且加以特殊符号进行区分不同的元素,比较常用的就是csv(Comma-Separated Values)格式,用逗号来分割每个数据。

1.1 一维、二维数据存取

对于一维数据,用一行存储,逗号分割
对于二维数据,用多行存储,不同的行表示再不同的1号轴。
例如:[[1,2,3],[4,5,6]]这样表示
1,2,3
4,5,6
1.写入方法
np.savetxt(frame, array, fmt=’%.18e’, delimiter=None)
• frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件
• array : 存入文件的数组
• fmt : 写入文件的格式,例如:%d %.2f %.18e
• delimiter : 分割字符串,默认是任何空格
2.读取方法
np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=False)
• frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件
• dtype : 数据类型,可选
• delimiter : 分割字符串,默认是任何空格
• unpack : 如果True,读入属性将分别写入不同变量
3.实例

import numpy as np
a=np.array([[1,2,3],
            [4,5,6],
            [7,8,9]])
#可以存到文本文件里,默认只要不是bz2和gz就会被事别问
#压缩文件里。只有bz2和gz后缀的文件被识别为压缩文件
#fmt指定数据类型
#delimiter指定数据的分隔符
np.savetxt("a.csv",a,fmt="%d",delimiter=",")
print(np.loadtxt("a.csv",delimiter=","))

#利用压缩文件
np.savetxt("a.gz",a,fmt="%d",delimiter=",")
np.savetxt("a.bz2",a,fmt="%d",delimiter=",")
#小数据量的时候反而体积变大,大数据量就会发现他的优越性

可以发现文件夹下面多了这些文件
在这里插入图片描述
同时打开哪个a.csv文本文件

1.2 多维数据的存储

1.2.1 当作一维数据来写入读取

相当于降维度为1维,然后用上面的方法写入
1.写入方式
a.tofile(frame, sep=’’, format=’%s’)
• frame : 文件、字符串
• sep : 数据分割字符串,如果是空串,写入文件为二进制
• format : 写入数据的格式
2.读取方式
np.fromfile(frame, dtype=float, count=‐1, sep=’’)
• frame : 文件、字符串
• dtype : 读取的数据类型
• count : 读入元素个数,‐1表示读入整个文件
• sep : 数据分割字符串,如果是空串,写入文件为二进制
3.实例

#1.存成一维的数据
a=np.arange(100).reshape(5,10,2)#通过函数构造数组
a.tofile("b.csv",sep=",",format="%d")
#不指定文件分隔符,存成二进制文件
a.tofile("b1.bat",format="%d")
#读取出来是一维数组
print(np.fromfile("b.csv",dtype=np.int,count=20,sep=",")

1.2.2 做到真正的作为多维数组的写入读取

通常就是再上一种方法的基础上,再写一个附加文件,每次要读数据文件的时候,就先读取这个附加文件,来获得数组的shape,数据类型。

#2.解决方法1,再普通的写一个文件指定他的数据类型和分隔符,每次打开这个文件的时候我们就读取他的shape和数据类型
a.tofile("b2.csv",sep=",",format="%d")
with open("b2_.csv","w") as file:
    file.write(str(a.shape))
    file.write("/int")#规定/为分隔符
#====此时我不知道读取的元素的形状
with open("b2_.csv") as file:
    strs=file.read().split("/")
shape=eval(strs[0])
#通过反射获取对应的数据类型
data_type=getattr(np,strs[1])
print(np.fromfile("b2.csv",dtype=data_type,sep=",").reshape(shape))

b2_.csv文件的内容

在这里插入图片描述
在这里插入图片描述

1.3 numpy便捷存取

上面的方法太难了,numpy按照我们上面的原理帮我们做了同样的事情。
、np.save(fname, array) 或 np.savez(fname, array)
• fname : 文件名,以.npy为扩展名,压缩扩展名为.npz,都是二进制文件
• array : 数组变量
np.load(fname)
• fname : 文件名,以.npy为扩展名,压缩扩展名为.npz

#3.解决方法2,模块已经帮我们写好类似于解决方法1的函数
np.save("b3",a)
print(np.load("b3.npy"))
np.savez("b3z",a)
print(np.load("b3z.npz"))

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44055272/article/details/89197108
今日推荐