- n维数组对象ndarray
- 两部分组成--数组内容和数组属性(数组类型和数组维度)
- 定义一个数组方法:a=numpy.array((1,1,1))或者a=numpy.array([1,1,1])生成一个ndarray的数组a,ndarray在程序中的别名是array
- ndarray对象的属性
- a.ndim 秩、维度的数量
- a.shape ndarray对象的尺度,对于矩阵,n行m列
- a.size 对象元素个数。n*m
- dtype 元素类型
- a.itemsize 对象中每个元素的大小,以字节为单位
- ndarray的元素类型
- bool 布尔
- intc 与C中int一致
- intp 用于索引的整数
- int8 字节长度的整数
- int16 16位长度的整数
- int32 32位长度的整数
- int64 64位
- unit8 8位无符号整数
- unit16
- unit32
- unit64
- float16
- float32
- float64
- complex64 复数
- complex128
- ndarray数组创建
- 字节流(raw bytes)中创建数组
- 从文件中读取特定格式,创建数组
- python中列表、元组创建ndarray数组
x= np.array(list/tuple)或者指定类型x=np.array(list/tuple, dtype=np.float32),不给出类型,自动判断 - Numpy中函数创建ndarray数组,如:array、ones、zeros
- np.arange(n):从0到n-1的数组
- np.ones(shape):全为1,例如np.ones((3,6))
- np.zeros(shape):全为0
- np.full(shape,val):根据shape生成一个数组,每个元素都是val
- np.eye(n):n*n的单位数矩阵
- np..ones_like(a):根据a的形状生成一个全1的数组
- np.zeros_like(a):根据a生成全0数组
- np.full_like(a)
- np.linspace(1,10,4):根据起止数据等间距地填充数据,形成数组,生成数组(1,4,7,10),若是np.linspace(1,10,4,endpoint=False),生成5个,排除10,(1,3.25,5.5,7.75)
- ndarray的数组操作
- np.concatenate():将两个或多个数组合并成一个新的数组
- .reshape(shape):例如a.reshape((3,8)) 得到的数组不改变a,生成新的数组
- .resize(shape):例如a.resize((3,8))改变了原数组的行列
- .swapaxes(ax1,ax2):将数组n个维度中两个维度进行调换
- .flatten():对数组进行降维,返回折叠后的一维数组,原数组不变
- .astype(new_type):类型转化。例如:a=np.ones((2,3,4),dtype=np.int),b=a.astype(np.float)
- 数组向列表转化:b=a.tolist(),python基础的数据结构:列表
- 一维数组索引:a[2],从0开始递增或者从-1开始递减
多维数组:a[1,2,3]:位置信息,或者a[-1,-2,-3] - 3元素切片:a[1:4:2]:含义:起始编号:终止编号:步长
多元素组切片:a[:,1,-3],或者a[:,1:3,:]
-
数组运算
- 数组与标量运算:作用于数组的每一个元素a = a / a.mean()
- 一元函数:np.abs(x)、np.fabs(x)、np.sqrt(x)、np.square(x)、np.log(x)、np.log10(x)、np.log2(x)、np.ceil(x)(不超过元素的整数值)、np.floor(x)(小于这个元素的最大整数值)、np.rint(x)(四舍五入)、np.modf(x)(小数部分和整数部分)、np.cos(x)、np.cosh(x)、np.exp(x)、np.sign(x)
- 二元函数:加减乘除乘方、np.maximum(x,y) np.fmax()
np.mod(x,y) np.copysign(x,y)(将数组y各元素的符号复制给数组x对应元素) 布尔型运算
-
adarray数组与csv文件写入与读出:
注意:csv文件只能有效存取一维数组和二维数组- 写入到csv文件中
np.savetxt(frame,array,fmt='%.18e',delimiter=None)
frame:文件、字符串或产生器,可以是.gz或者.bz2的压缩文件,文件名
array:存入文件的数组
fmt:写入文件的格式:例如:%d %.2f %.18e
delimiter:分割字符串
例如:
a = np.arange(100).reshape(5,20)
np.savetxt('a.csv',a,fmt='%d',delimiter=',')
文件保存在当前文件目录下,我的是在C盘的用户目录下,可以更改 - 从csv文件中读出
np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)
frame:文件名,可以是压缩文件.gz或者.bz2
dtype:数据类型
delimiter:分割字符串,默认位任何空格
unpack:true,读入属性将分别写入不同变量
- 写入到csv文件中
-
多维数组的存取
注意:使用的时候要知道存入文件时数组的维度和元素类型- 写到文件中:
a.tofile(frame,sep='',format='%s')
frame:文件、字符串
sep:数据分割字符串、如果为空串,写入文件为二进制。
format:写入数据的格式
例如:
a.tofile('b.dat',sep=',',format='%d') //此时文件中为一串有逗号分割的数字,无分组信息
- 从文件中读文件
np.fromfile(frame,dtype=float,count=-1,sep='')
count:读入元素的个数,-1表示读入整个文件
sep:数据分割字符串、如果为空串,读取的文件为二进制。
例如:
c=np.fromfile('b.dat',dtype=np.int,sep=',') //此时c为一个一维数组
可以使用reshape变为多维数组。
- 写到文件中:
便捷的文件存取
np.save(fname,array) //fname中以.npy为扩展名
np.savez(fname,array) //fname中以.npz为压缩扩展名
np.load(fname)-
随机数函数--random子库
- rand(d0,d1,..dn) 根据d0-dn创建随机数数组,浮点数[0,1),均匀分布
- randn(d0,d1,..dn) 根据d0-dn创建随机数数组,标准正态分布
- randint(low,high,shape):根据shape创建随机整数或整数数组,范围是[low,high)
- seed(s) 随机数种子,s是给定的种子值
a=np.random.randn(3,4,5) //生成3维矩阵,维数分别是3,4,5 b=np.random.randint(100,200,(3,4))
- shuffle(a) 根据数组a的第一轴进行随机排序,改变数组a
- permutation(a) 根据数组a的第一轴进行随机排序,不改变数组a
- choice(a,size,replace,p) 从一维数组a中以概率p抽取元素,形成size形状新数组,replace表示是否可以重用元素,默认为true
- uniform(low,high,size) 产生具有均匀分布的数组,low起始值,high结束值,size形状
- normal(loc,scale,size) 产生具有正态分布的数组,loc均值,scale标准差,size形状
- poisson(lam,size) 产生具有泊松分布的数组,lam随机事件发生率,size形状
-
统计函数
- sum(a,axis=None) :给定轴axis计算和,axis整数或者元组
- mean(a,axis=None):给定轴axis计算期望
- average(a,axis=None,Weight=None) 给定轴axis计算数组a计算相关元素的加权平均值
- std(a,axis=None) 计算数组a相关元素的标准差
- var(a,axis=None) 计算数组a相关元素的方差
- min(a)
- argmin(a) 计算数组a中元素最小值、最大值降一维后下标
- unravel_index(index,shape) 根据shape将一维下标index转换成多维下标
- ptp(a) 计算数组a中元素最大值和最小值的差
- median(a) 计算数组a中元素的中位数(中值)
梯度函数--及斜率
np.gradient(a):返回元素的梯度,当f为多维时,返回每个维度梯度图像的数组表示
图像:RGB色彩表示
PIL库:具有强大图像处理能力的第三方库
使用:from PIL import Image
Image是PIL库中代表一个图像的类
im=np.array(Image.open("path+fileName"))
print(im.shape,im.dtype)
Image.open("E://Desktop//0.jpg").convert('L')
将图像转化为灰度图