导图社区 Python
文件中的类型处理包括文件的基本概念,文件的编码,文件的类型,文件的操作和数据组织的维度等内容。框架清晰,感兴趣的小伙伴可以下载收藏哟。
编辑于2022-11-15 09:30:50 山东省文件中的类型处理&Numpy
前言
Numpy:高性能科学计算和数据分析的基础包。
nadarray数组:一个具有矢量算术运算和复杂广播能力的多维数组,具有快速且节省空间的特点
对症组数据进行快速运算的标准数学函数
线性代数、随机数生成以及傅里叶变换功能
读写磁盘数据、操作内存映射文件
Tensor概念
Tenosr表示数据,在神经网络中传输的数据仅为Tensor。可以理解为多维数组,不同Tenosr可以有不同的数据类型和形状,同一Tensor中的所有元素的类型相同。
ndarray数组
为什么引入ndarray数组
ndarray数组中所有元素的数据类型相同、数据地址连续,批量操作数组元素时速度更快
ndarray数组支持广播机制,矩阵运算时不需要写循环
Numpy底层使用C语言编写,内置并行计算功能,运行速度高于Python代码
创建ndarray数组
创建ndarray数组最简单的方式就是使用array函数,就收一些序列性的对象
array:创建嵌套序列,并转换为一个多维数组
a=[1,2,2,] b=np.array(a)
c=np.array([1,2,3])
arange:创建元素从x到y依次递增n的数组
d=np.array(x,y,n)
zeros:创建指定长度或形状的全零数组
e=np.zeros([x,y])
ones:创建指定长度或形状的全一数组
f=np.ones([x,y])
查看ndarray数组的属性
shape:数组的形状,x*y
dtype:数组的数据类型
seze:数组中包含的元素个数
ndim:数组的维度大小
改变ndarray数组的数据类型和形状
数据类型astype
形状reshape
ndarray数组的基本运算
标量和ndarray数组之间的运算
加减乘除每个位置均运算
两个ndarray数组之间的运算
加减乘除根号对应位置运算,支持广播
nadarray数组的索引和切片
双向索引
切片a=np.arange(start:stop:step)
数组切片产生的新数组还是只想原来的内存区域,数据不会被复制,可以通过复制数组解决
多维数组切片
各索引位置上的元素不再是标量而是多维数组
以逗号隔开的索引列表来选取单个元素
在多维数组中,如果省略了后面的索引,则返回一个维度地的ndarry。但包含所有数据。-1会选取合适的数字
随机数np.random
创建随机ndarray数组
设置随机数种子
np.random.seed(n)
在某个提前设定好的库中找到一个组选取已确定的数字
如果不设置的话,就是在提前设定好的库随机选个库
均匀分布
np.random.rand(x,y)随机生成一个x*y的随机数组,范围在[0,1]之间
正态分布
np.random.randn(x,y)生成标准正态分布(均值为0,方差为1)随机数
np.random.normal(loc=a,scale=b,size=(x,y))生成均值为a,方差为b,x*y的正态分布随机数
随机打乱mdarray数组顺序np.random.shuffle(a)
随机打乱1维数组,所有元素位置都被打乱
随机打乱2维数组,每一行不变,每行的位置变了
随机选取元素
a=np.arange(30) b=np.random.choice(a,size=6)
a创建了一个30个数的数组,b在a中选了6个数
Numpy保存和导入文件
文件读写
d=np.fromfile('数据.data',sep=' ')从文本文件data读入数据,并用 分开
文件保存
Numpy应用举例
图像翻转和裁剪:图像是由像素点构成的矩阵,其数值可以用ndarray表示。
操作
# 读入图片 image = Image.open('校验图片(吸烟).png')#.png图片默认4通道:透明通道 image = np.array(image) # 查看数据形状,其形状是[H, W, 3], # 其中H代表高度, W是宽度,3代表RGB三个通道 image.shape
原始图片 plt.imshow(image)
保存图片 im3 = Image.fromarray(image3) im3.save('im3.png')
翻转
垂直方向翻转 image2 = image[::-1, :, :] plt.imshow(image2)
水平方向翻转 image3 = image[:, ::-1, :] plt.imshow(image3)
垂直加水平翻转 image4 = image[::-1, ::-1, :] plt.imshow(image4)
裁剪
# 高度方向裁剪 (704, 535, 4) H = image.shape[0] W = image.shape[1] # 注意此处用整除,H必须为整数 H1 = H // 2 H2 = H image4 = image[H1:H2, :, :] plt.imshow(image4)
# 宽度方向裁剪 W1 = W//5 W2 = W//4 * 2 image5 = image[:, W1:W2, :] plt.imshow(image5)
# 两个方向同时裁剪 image5 = image[H1:H2,W1:W2, :] plt.imshow(image5)
调整亮度
# 调整亮度 image6 = image * 0.8 plt.imshow(image6.astype('uint8')) #uint8为8位无符号整数类型,表示范围为[0, 255]
# 调整亮度 image7 = image * 2.0 # 由于图片的RGB像素值必须在0-255之间, # 此处使用np.clip进行数值裁剪 image7 = np.clip(image7, a_min=0, a_max=255) plt.imshow(image7.astype('uint8'))
取点
#高度方向每隔一行取像素点 0 2 image8 = image[::2, :, :] plt.imshow(image8)
#宽度方向每隔一列取像素点 image9 = image[:, ::2, :] plt.imshow(image9)
#间隔行列采样,图像尺寸会减半,清晰度变差 image10 = image[::5, ::5, :] plt.imshow(image10) image10.shape
导入需要的包 import numpy as np import matplotlib.pyplot as plt #使用matplotlib画出图形 from PIL import Image
数据组织的维度
一维数据
概念:一维数据由对等关系的有序或无序数据构成,采用线性方式组织,对应于数学中数组的概念
存储:采用空格、逗号、换行符或其他符号分隔数据
csv文件操作一般join(向量)方法最为方便
处理:读入csv后使用strip("\n")he split(",")
fi=open("v,csv","r") Is=fi.read().strip("\n").split(",") fi.close()
['天安门','故宫','九华山','黄山']
二维数据
概念:二维数据由多个一维数据构成,可以看作是一堆数据的组合形式
存储:二维数据由一维数据组成,用csv格式文件存储。csv每一行是一维数据,整个csv文件是一个二维数据
采用便利循环和join()方法结合输出内同
处理:对二维数据进行处理首先需要从csv格式文件读入二维数据,并将其表示为二维列表对象
高维数据
概念:由键值对类型的数据构成,采用对象方式组织,可以多层嵌套。
高维数据是当今Internet组织内容的主要形式,高维数据衍生出HTML、XML、JOSN等具体数据组织的语法结构
高维数据相比一维和二维数据能表达更加灵活和复杂的数据关系。
文件的操作
操作统一步骤:打开→操作→关闭
打开
open()函数打开文件<变量名>=open(<相对或绝对路径>,<打开模式>)
r
只读模式,若文件不存在返回异常FileNotFoundError
w
覆盖写模式,文件不存在则创建,存在则覆盖
x
创建写模式,文件不存在则创建,存在则返回异常File Exists Error
a
追加写模式,文件不存在则创建,存在则在文件最后追加内容
b
二进制文件模式
t
文本文件模式
+
与rwxa一同使用,在原功能基础上增加同时读写功能
读方法
f.read()
从文件中读入整个文件内容
f.readline()
从文件中读入一行内容
f.readlines()
从文件中读入所有行,以每行为元素形成一个列表
f.seek(偏移量,whence=相对位置)
改变当前文件操作指针的位置。whence的值为0开头,1当前位置,2末尾
偏移量整数项文章尾偏移,负数(b模式打开)向文章头偏移
写方法
f.write
向文件写入一个字符串或字节流
f.writelines
将一个元素为字符串的列表整个写入文件
关闭
close()函数关闭文件<变量名>.close()
写文件时,操作系统不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候写入
文件的类型
文本文件
一般有单一特定编码的字符组成,如UTF-8,内容容易统一展示和阅读。大部分的文本文件都可以通过文本编辑软件或文字处理软件创建、修改和阅读。由于文本文件存在编码,所以,它也可以看作是存储在磁盘上的长字符串。
二进制文件
二进制文件直接由比特0和1组成,没有统一的字符编码,文件内部数据格式与文件通途有关。
二进制是信息按照非字符但有特定格式形成的文件。二进制文件由于没有统一的字符编码,只能当作字节流,而不是看作是字符串
文件的编码
ANSI编码:美国国家标准学指定的编码,不同的ANSI编码互不兼容,对于同一种ANSI编码0x00~0x7F之间的字符,仍然是一个字节代表一个字符
Unicode码:继ANSI编码之后推出的一种国际标准字符编码方法,可以容纳所有语言文字,每个字符都有唯一的编码。从Unicode码开始,无半角和全角之分,全部统一计为1个字符
UTF-8:就是以8为为单元对Unicode字符集进行编码,即每次传输8位数据
Unicode big endian编码:记事本中的Unicode是little endian编码。Unicode big endian编码和little endian编码区别在于处理多字节说的方式不同。
Python语言的文件编码:在Python3.x版本中,文件默认编码格式是UTF-8,字符串使用的是Unicode编码
文件的基本概念
文件:存储在辅助存贮器上的一组数据序列,可以包含任何数据类型
目录:目录一般采用树状结构,有绝对路径和相对路径/等同于\但\需要转义为\\