NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。Numpy内部解除了Python的PIL(全局解释器锁),运算效率极好,是大量机器学习框架的基础库!
-
以下的缩写均是导入模块的缩写
import numpty as np import pandas as pd import matplotlib.pyplot as plt
-
使用np.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)有python list创建
参数为列表:[1,2,3,4,5]名称 描述 object 数组或嵌套的数列 dtype 数组元素的数据类型,可选 copy 对象是否需要复制,可选 order 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认) subok 默认返回一个与基类类型一致的数组 ndmin 指定生成数组的最小维度 -
np.asarray(a, dtype = None, order = None)
numpy.asarray 类似 numpy.array,但 numpy.asarray 只有三个,比 numpy.array 少两个。参数 描述 a 任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组 dtype 数据类型,可选 order 可选,有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。 -
NumPy 的数组中比较重要 ndarray 对象属性有:
属性 说明 ndarray.ndim 秩,即轴的数量或维度的数量 ndarray.shape 数组的维度,对于矩阵,n 行 m 列 ndarray.size 数组元素的总个数,相当于 .shape 中 n*m 的值 ndarray.dtype ndarray 对象的元素类型 ndarray.itemsize ndarray 对象中每个元素的大小,以字节为单位 ndarray.flags ndarray 对象的内存信息 ndarray.real ndarray元素的实部 ndarray.imag ndarray 元素的虚部 ndarray.data 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。 - 注意:
numpy默认ndarray的所有的数据类型都是相同的
如果传递进来的数据类型有不同的,则统一为同一类型,优先级为:str > float > int
arr = np.array([1,2,3,4,5]) arr.shape #显示的是维数,以元祖的形式输出
- 注意:
-
np.dtype(object, align, copy)
名称 描述 object 要转换为的数据类型对象 align 如果为 true,填充字段使其类似 C 的结构体。 copy 复制 dtype 对象 ,如果为 false,则是对内置数据类型对象的引用 -
numpy.empty(shape, dtype = float, order = ‘C’)
numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组:参数 描述 shape 数组形状 dtype 数据类型,可选 order 有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。 -
np.ones(shape,dtype=None,order=‘C’)
创建指定形状的数组,数组元素以 1 来填充参数 描述 shape 数组形状 dtype 数据类型,可选 order ‘C’ 用于 C 的行数组,或者 ‘F’ 用于 FORTRAN 的列数组 func = np.ones(shape=(5,4),dtype=int) #创建的是一个5行4列的二维数组
代码执行后显示的是一张白色图片
ones= np.ones(shape=(100,80,3),dtype=float) plt.imshow(ones) plt.show()
-
np.zeros(shape,dtype=float,order=‘C’)
参数 描述 shape 数组形状 dtype 数据类型,可选 order ‘C’ 用于 C 的行数组,或者 ‘F’ 用于 FORTRAN 的列数组 语法要求没有那么严格,输出的是一个四维数组,默认值全部使用0填充
zeros = np.zeros((4,4))
-
np.full(shape,fill_value,dtype=None,order=‘C’)
创建的是一个数组,默认值是用fill_value的值进行填充full = np.full((10,10),fill_value=1024)
-
np.eye(N,M=None,k=0,dtype=float)
创建一个N维数组,对角线为1其他位置为0,创建的是一个满秩的矩阵eye = np.eye(10,dtype=int)
-
np.linspace(start,stop,num=50,endpoint=True,retstep=Flase,dtype=None)
数 描述 tart 序列的起始值 top 序列的终止值,如果endpoint为true,该值包含于数列中 um 要生成的等步长的样本数量,默认为50 ndpoint 该值为 ture 时,数列中中包含stop值,反之不包含,默认是True。 etstep 如果为 True 时,生成的数组中会显示间距,反之不显示。 type ndarray 的数据类型 函数用于创建一个一维数组,数组是一个等差数列构成的
lins = np.linspace(1,100,20)
-
np.arange(start,stop,step,dtype=None)
参数 描述 start 起始值,默认为0 stop 终止值(不包含) step 步长,默认为1 dtype 返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。 根据 start 与 stop 指定的范围以及 step 设定的步长,生成一个 ndarray。使用改方法创造ndarray时候,左闭右开
ara = np.arange(0,50,2)
-
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
base 参数意思是取对数的时候 log 的下标。参数 描述 start 序列的起始值为:base ** start stop 序列的终止值为:base ** stop。如果endpoint为true,该值包含于数列中 num 要生成的等步长的样本数量,默认为50 endpoint 该值为 ture 时,数列中中包含stop值,反之不包含,默认是True。 base 对数 log 的底数。 dtype ndarray 的数据类型 函数用于创建一个于等比数列
-
np.random.randint(low,high=None,size=None,dtype=‘1’)
生成随机数,在0到100之间随机生成5个随机数ran = np.random.randint(0,100,size=5)
-
np.random.randn(d0,d1,d2,d3,…,dn)
生成的是标准正态分布randn = np.random.randn(100)
-
np.random.normal(loc=0.0,scale=1.0,size=None)
生成的也是一个正态分布,只不过这个中间值是自己可以指定,当scale的值越大时,数据的波动就会越大normal = np.random.normal(loc=170,scale=50,size=100)
-
np.random.random(size=None)
生成0到1的随机数
eg:使用随机数生成一张图片,数字3表示的是生成的是三维的图片r = np.random.random(size=(200,300,3)) plt.imshow(r) plt.show()
-
级联
np.concatenate()级联需要注意的点:- 级联的参数是列表:一定要加中括号或者是小括号
- 维度必须相同
- 形状相同
- 级联的方向默认是shape这个tuple的第一个值所代表的维度方向
- 可通过axis参数改变级联的方向
np.hstack:水平级联
np.vstack:垂直级联 -
ndarray的排序
- 快速排序
np.sort()与ndarray.sort()都可以,但是有区别:
np.sort()不改变输入
ndarray.sort()本地处理,不占用空间,但改变输入 - 部分排序
np.partition(a,k)
当k为正时,我们得到的是最小的k个数
当k为负时,我们得到的是醉倒的k个数
- 快速排序
SciPy
SciPy是构建在numpy的基础之上的,它提供了许多的操作numpy的数组的函数。SciPy是一款方便、易于使用、专为科学和工程设计的python工具包,它包括了统计、优化、整合以及线性代数模块、傅里叶变换、信号和图像图例,常微分方差的求解等
- scipy 文件输入输出
- 随机生成数组,使用scipy中的io.savemat()保存,文件格式是.mat,标准的二进制文件
import numpy as np import pandas as pd from pandas import Series,DataFrame import matplotlib.pyplot as plt import scipy.io as spio import scipy.misc as misc nd = np.random.randint(0,150,size=10) # 保存文件 spio.savemat(file_name="nd",mdict={"data":nd}) # 读取文件 spio_data = spio.loadmat("nd")["data"] print(spio_data)
- 随机生成数组,使用scipy中的io.savemat()保存,文件格式是.mat,标准的二进制文件
- 图片处理
import numpy as np import pandas as pd from pandas import Series,DataFrame import matplotlib.pyplot as plt import scipy.misc as misc import scipy.ndimage as ndimage # 读取图片显示图片 face = misc.face(gray=True) # gray=True 获取的图片是黑白 plt.imshow(face,cmap="gray") plt.show() # 移动坐标 shift_face = ndimage.shift(face,[200,0],mode='constant') plt.imshow(shift_face,cmap="gray") plt.show() # 旋转图片 face_rotate = ndimage.rotate(face,angle=180) plt.imshow(face_rotate,cmap="gray") plt.show() # 缩放图片 face_zoom = ndimage.zoom(face,zoom=0.5) plt.imshow(face_zoom,cmap="gray") plt.show() # 切割图片 face_spilt = face[:512,-512:] plt.imshow(face_spilt,cmap="gray") plt.show()
- 图片进行过滤
添加噪声,对噪声图片使用ndimage中的高斯滤波,中值滤波,signal中维纳滤波进行处理,是图片变得清楚- 加载图片,使用灰色图片misc.face()添加噪声
import numpy as np import pandas as pd from pandas import Series,DataFrame import matplotlib.pyplot as plt import scipy.misc as misc import scipy.ndimage as ndimage # 将图片置为灰色图片 face = misc.face(gray=True) face = face[:512,-512:] # 获取图片的标准方差 std = face.std() # 获取图片的维度 shape = face.shape # 添加噪声 face = face + std*0.8*np.random.random(shape) plt.imshow(face,cmap='gray') plt.savefig('./test.jpg') plt.show()
- 高斯滤波signal:高斯核的标准偏差
通过改变高斯核的标准偏差来改变图片的清晰度import numpy as np import pandas as pd from pandas import Series,DataFrame import matplotlib.pyplot as plt import scipy.misc as misc import scipy.ndimage as ndimage # 将图片置为灰色图片 face = misc.face(gray=True) face = face[:512,-512:] # 获取图片的标准方差 std = face.std() # 获取图片的维度 shape = face.shape # 添加噪声 face = face + std*0.8*np.random.random(shape) plt.imshow(face,cmap='gray') plt.show() # 高斯滤波signal:高斯核的标准偏差 face_g = ndimage.gaussian_filter(face,sigma=0.8) plt.imshow(face_g,cmap='gray') plt.savefig('./test.jpg') plt.show()
- 中值滤波参数size:给出在每个元素上从输入数组中去除的形状位置,定义过滤器功能的输入
import numpy as np import pandas as pd from pandas import Series,DataFrame import matplotlib.pyplot as plt import scipy.misc as misc import scipy.ndimage as ndimage # 将图片置为灰色图片 face = misc.face(gray=True) face = face[:512,-512:] # 获取图片的标准方差 std = face.std() # 获取图片的维度 shape = face.shape # 添加噪声 face = face + std*0.8*np.random.random(shape) plt.imshow(face,cmap='gray') plt.show() # 中值滤波参数size:给出在每个元素上从输入数组中去除的形状位置,定义过滤器功能的输入 face_median = ndimage.median_filter(face,size=3) plt.imshow(face_median,cmap='gray') plt.savefig('./test.jpg') plt.show()
- signal维纳滤波mysize:滤镜尺寸的标量
import numpy as np import pandas as pd from pandas import Series,DataFrame import matplotlib.pyplot as plt import scipy.misc as misc import scipy.ndimage as ndimage import scipy.signal as signal # 将图片置为灰色图片 face = misc.face(gray=True) face = face[:512,-512:] # 获取图片的标准方差 std = face.std() # 获取图片的维度 shape = face.shape # 添加噪声 face = face + std*0.8*np.random.random(shape) plt.imshow(face,cmap='gray') plt.show() # signal维纳滤波mysize:滤镜尺寸的标量 face_signal = signal.wiener(face,mysize=5) plt.imshow(face_signal,cmap='gray') plt.savefig('./test.jpg') plt.show()
- 加载图片,使用灰色图片misc.face()添加噪声