Python学习-Numpy库文件操作(文本文件,二进制文件,缺失数据文件的读取操作)

Python学习-Numpy库文件操作

目录
1、文本文件的存取
2、带缺失数据文件读取
3、使用正则表达式解析从文本文件构造数组
4、二进制文件存取
5、将多个数组以未压缩.npz格式保存到文件中
6、根据文本文件或二进制文件中的数据构造数组
7、以内存映射的方式读取二进制文件
8、副本与视图的区别
9、广播原理
注:打印小技巧,取消大型数组打印不完全状况
导入库
import numpy as np
import sys
取消省略打印,打印所有数据
np.set_printoptions(threshold=sys.maxsize)  # 打印所有数据,不省略打印
1、文本文件的存取
x = np.array([[1, 2, 3], [4, 5, 6]])
y = np.ones(8).reshape(2, 4)
文本文件保存
np.savetxt(fname='a.txt', X=x, fmt='%.2f', delimiter=',', newline='\n', \
           header='', footer='', comments='#', encoding=None)
文本文件读取
data = np.loadtxt(fname='a.txt', dtype=None, comments='#', delimiter=',', \
                  converters=None, skiprows=0, usecols=None, unpack=False, \
                  ndmin=0, encoding=None, max_rows=None)
print(data)
输出
[[1. 2. 3.]
 [4. 5. 6.]]
2、带缺失数据文件读取
data = np.genfromtxt(fname='a.txt', dtype=None, comments='#', delimiter=',', \
                     skip_header=0, skip_footer=0, converters=None, missing_values=None, \
                     filling_values=None, usecols=None, names=None, excludelist=None, \
                     deletechars=None, replace_space='_', autostrip=False, case_sensitive=True, \
                     defaultfmt='f%i', unpack=None, usemask=False, loose=True, invalid_raise=True, \
                     max_rows=None, encoding=None)
print(data)
输出
[[1. 2. 3.]
 [4. 5. 6.]]
3、使用正则表达式解析从文本文件构造数组
with open('b.dat','w') as f:
    f.write("2000 C++ \n3000 JAVA \n4000 PYTHON")

regexp = r"(\d+)\s+(...)"  # 匹配数字(\d+),空白\s+,任何东西(...)
out = np.fromregex(file='b.dat', regexp=regexp, dtype=[('Number', np.int64),  ('key', 'S3')], encoding=None)
print(out)
输出
[(2000, b'C++') (3000, b'JAV') (4000, b'PYT')]
4、二进制文件存取
二进制文件保存
np.save(file=r'c', arr=x, allow_pickle=True, fix_imports=True)
从.npy、.npz或pickled文件加载数组或pickle对象
data = np.load(file='c.npy', mmap_mode=None, allow_pickle=True, fix_imports=True, encoding='ASCII')
print(data)
输出
[[1 2 3]
 [4 5 6]]
5、将多个数组以未压缩.npz格式保存到文件中
np.savez(r'd', x, y)
读取npz
d = np.load(r'd.npz')
for i in d.items():
    print(i)
输出
('arr_0', array([[1, 2, 3],
       [4, 5, 6]]))
('arr_1', array([[1., 1., 1., 1.],
       [1., 1., 1., 1.]]))
6、根据文本文件或二进制文件中的数据构造数组
data = np.fromfile(file=r'E:\壁纸\壁纸2.jpeg', dtype=float, count=-1, sep='')
print(data)
7、以内存映射的方式读取二进制文件
data = np.memmap(filename='c.npy', dtype=np.int64, mode='r+', offset=0, shape=(2, 3), order='C')
print(data)
输出
[[    379676406402707 7166182912910098550 3776615901268944754]
 [8390891540278422567 7306090318169792882 8317129565662750578]]
8、副本与视图的区别:副本用copy()方法实现,副本的改变不影响原数据集,物理内存不一致,视图是直接赋值,物理内存一致,视图改变的同时原数据也相应改变
z = y  # 视图
z = x.copy()  # 副本
9、广播原理
1)两个数组其中一个(行或列向)的长度为1
2)两个数组的后缘维度,即从末尾开始算起的维度的长度相符,例三维数组的二维和一维与另一个二维数组一致,则可以广播
m = np.array([2, 2, 2])
print(z + m)
输出
[[3 4 5]
 [6 7 8]]

你可能感兴趣的:(IT,python,python,numpy,矩阵,后端)