本文为原创文章,转载请注明出处
查看[深度学习]系列内容请点击:https://www.jianshu.com/nb/40219414
基础
Numpy的所有操作都是操作ndarray对象,ndarray是一个N维数组,下标从0开始。
【下面所说对矩阵和数组不做严格区分】
ndarray的构成
- 一个指向数据存储地址的指针;
- 数据类型dtype;
- 表示数组形状的元组shape;
- 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。
ndarray初始化
array = numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
object:原始矩阵;
dtype:数据类型,包含多种;
copy:意义未知;
order:创建数组的样式,C为行方向,F为列方向,A为任意方向;
subok:默认返回与object类型一致的数组;
ndmin:指定生成数组的最小维度,object维度不够则用空维度扩充
ndarray数据类型
常见数据类型
数据类型包含常见的整数、浮点数、字符串、复数等,常见的分别用如下字符串表示:
bool_、int_、intc、intp、int8、int16、int32、int64、uint8、uint16、uint32、uint64、float_、float16、float32、float64、complex_、complex64、complex128
数据类型对象dtype
以上的常见数据类型都是内置的数据类型对象,即特殊的dtype对象,我们也可以自定义很多数据类型对象(如定义结构体类型等),具体用到的时候可以查阅相关资料。
ndarray属性
- ndarray.ndim:秩,矩阵维度数量
- ndarray.shape:矩阵的形状,每一维度的长度
- ndarray.size:矩阵中元素总个数
- ndarray.dtype:数据类型
- ndarray.itemsize:每个元素占的字节数,每个元素的大小
- ndarray.flags:内存信息
- ndarray.real:数组元素的实部
- ndarray.imag:数据元素的虚部
- ndarray.data:包含矩阵直的缓冲区地址
Numpy创建矩阵
numpy.empty(shape, dtype = float, order = 'C')
shape为list或tuple,表示行列数等,dtype表示类型,order是计算机中元素存储的顺序(行优先或者列优先)。
初始化矩阵有以下几种方式:
- numpy.empty():随机初始化,值随机;
- numpy.zeros():值为0;
- numpy.ones():值为1;
- numpy.asarray(object,dtype=… ,order=…):值和形状都与object保持一致,(object转ndarray);
- numpy.frombuffer():从buff接收流式数据;
- numpy.fromiter():从可迭代对象获取数据;
- numpy.arange(start,stop,step,dtype):从start(默认0)到stop(不包含stop),以步长step取值填充返回一维数组;
- numpy.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None):生成从start到stop的长度为num的等差数列,endpoint表示数列是否包含stop,retstep表示生成的数列中是否包含步长;
- numpy.logspace(start,stop,num=50,ndpoint=True,base=10.0,dtype=None):生成从basestart到basestop,长度为num的等比数列。
Numpy切片和索引
切片
可以通过冒号:start:stop:step来切片,也可以通过slice(start,stop,step)来切片。
索引
- 下标索引:如a[2];
- 整数数组索引:a[[0,1,2],[0,1,0]] 表示获取分别获取a数组(0,0),(1,1),(2,0)位置的元素;
- 布尔索引:a[a>5] 表示取a中大于5的元素,内外括号都必须是a;
- 花式索引:a[[4,2,1,7]] 表示取a的4、2、1、7行;
Numpy不同大小数组运算广播
不同尺寸的矩阵进行运算(加减乘除)时,Numpy自动寻找可计算的维度,若都不可计算则报错。比如:
a=np.array([[0,0,0,0],[10,10,10,10]])
b=np.array([1,2,3,4])
c=np.array([[1],[2]])
则:a+b的值为:
array([[ 1, 2, 3, 4],
[11, 12, 13, 14]])
a+c的值为:
array([[ 1, 1, 1, 1],
[12, 12, 12, 12]])
Numpy数组操作
- ndarray.reshape():修改数组形状,不改变数据,返回的新数组与原数组共用内存;
- ndarray.flat:返回元素迭代器,迭代数组元素;
- ndarray.flatten(order=’C’):元素重新组成一维数组,新数组与原数据不共用内存;
- ndarray.ravel(order=’C’):元素重新组成一维数组,新数组与原数据共用内存;
- ndarray.transpose(axes=None):axes为变换的维度,如axes=[1,0]表示将原来的第0维变换维第1维,第1维变换为第0维;
- ndarray.T:矩阵转置;
- ndarray.rollaxis():滚动变换(细节再再看);
- ndarray.swapaxes(axis1,axis2):交换坐标轴;
- numpy.expand_dims(arr,axis):在第axis维扩充一个维度;
- numpy.squeeze(arr,axis):在axis维度删除一个维度(该维度只能有一条数据);
其他更多暂不介绍,用到再查。
Numpy字符串操作
- numpy.char.add(a1,a2):依次连接a1和a2中的字符串,形成新数组;
- numpy.char.multiply(s,n):将s重复n次;
- numpy.char.center(s,n,fillchar=’*’):s居中,若len(s)小于n则使用fillchar填充两边;
- numpy.char.capitalize(s):s首字母转大写;
- numpy.char.title(s):s中每个词首字母都转大写;
- numpy.char.lower/upper/split/splitlines/join/strip/replace/encode/decode:不在赘述。
Numpy数学函数
- numpy.pi:圆周率;
- numpy.sin(a)/cos(a)/tan(a)/cot(a)/arcsin(a)/arccos(a)/arctan(a)等计算三角函数;
- numpy.around(a,decimals):a数组中的元素四舍五入,decimals表示保留小数位数;
- np.floor(a)/ceil(a):a数组元素向下/向上取整;
Numpy算数函数
- numpy.add(a1,a2)/subtract(a1,a2)/multiply(a1,a2)/divide(a1,a2):a1和a2中对应项相加/相减/相乘/相除;
- numpy.reciprocal(a):a中对应元素取倒数;
- numpy.power(a,b)/mod(a,b):计算a中数组元素对应的b中元素的幂/余数;
Numpy统计函数
- numpy.amin(a,n)/amax(a,n):在第n维度上计算a的最小值/最大值;
- numpy.ptp(a,axis=n):在第n维度上分别计算a中最大值与最小值的差异;
- numpy.percentile(a,q,axis):在a的第axis维计算q百分位数,0<=q<=100;
- numpy.median(a,axis)/mean(a,axis):在a的第axis维计算a的中位数/平均值;
- numpy.average(a,axis,weights,returned=True):计算a的加权平均值,weights为权值;
- numpy.std(a)/var(a):计算a的标准差/方差。
Numpy排序、条件筛选
- numpy.sort(a,axis,kind,order):kind默认为快速排序,order表示要排序的字段(如果有字段的话),axis表示要排序的维度;
- numpy.argsort(a):返回数组值从小到大的索引值;
- numpy.lexsort():多序列排序;
- numpy.msort(a):按照第一个轴排序;
- numpy.sort_complex():复数排序;
- numpy.partition/argpartition:排序并分区;
- numpy.argmax(a,axis)/argmin(a,axis):给定维度的最大值最小值索引;
- numpy.nonzero(a):非0数据索引;
- numpy.where(x>3):满足条件的元素索引;
- numpy.extract(condition,a):返回a中满足条件condition的元素索引。
Numpy视图、拷贝
- b=a:无拷贝,b是a的一个引用,二者等价;
- b=a.view():浅拷贝,改变b的形状不会对a有影响,但二者的数据指向相同的内存单元;
- b=a[3:] 切片:也是浅拷贝;
- b=a.copy():深拷贝。
Numpy矩阵库
Numpy包含了一个矩阵库:numpy.matlib,可以返回多种矩阵如单位矩阵等。
Numpy线性代数
- numpy.dot(a,b):a和b矩阵点积;
- numpy.vdot(a,b):a和b向量点积;
- numpy.inner(a,b):a和b向量内积;
- numpy.matmul(a,b):会广播的矩阵点积;
- numpy.linalg.det(a):计算a的行列式;
- numpy.linalg.solve(a):计算矩阵方程解;
- numpy.linalg.inv(a):计算矩阵a的逆矩阵。
Numpy绘图
使用Matplotlib库绘图。
网友评论