Python矩阵的基本用法
mat()函数将目标数据的类型转化成矩阵(matrix)
1,mat()函数和array()函数的区别
Numpy函数库中存在两种不同的数据类型(矩阵matrix和数组array),都可以用于处理行列表示的数字元素,虽然他们看起来很相似,但是在这两个数据类型上执行相同的数学运算可能得到不同的结果,其中Numpy函数库中的matrix与MATLAB中matrices等价。
直接看一个例子:
结果:
[[1 3]
[5 7]]
[[1 2]
[3 4]]
<class 'numpy.matrixlib.defmatrix.matrix'>
<class 'numpy.matrixlib.defmatrix.matrix'>
[[1 3]
[4 5]]
<class 'numpy.ndarray'>
首先,mat() 函数与array()函数生成矩阵所需的数据格式有区别,mat()函数中数据可以为字符串以分号(;)分割或者为列表形式以逗号(,)分割,而array()函数中数据只能为后者形式。
其次,两者的类型不同,用mat函数转换为矩阵后才能进行一些线性代数的操作。
2,mat()函数创建常见的矩阵
2.1,zeros
zeros函数是生成指定维数的全0数组
2.2,ones
ones函数是用于生成一个全1的数组
2.3,eye
eye函数用户生成指定行数的单位矩阵
2.4,full
numpy.full(shape,fill_value=num)用于创建一个自定义形状的数组,可以自己指定一个值,用它填满整个数组。
fill_value 用来填充的值,可以是数字,也可以是字符串
2.5 nonzero()
nonzero函数是numpy中用于得到数组array中非零元素的位置(数组索引)函数。它的返回值是一个长度为a.ndim(数组a的轴数)的元组,元组的每个元素都是一个整数数组,其值为非零元素的下标在对应轴上的值。
只有a中非零元素才会有索引值,那些零值元素没有索引值,通过a[nonzero(a)]得到所有a中的非零值。
a是一维数组(索引1和索引2的位置上元素的值非零)
a是多维数组
解释一下:矩阵 b中,b[0,0] b[0,1],b[0,2],b[0,4],b[0,5],b[1,0],b[1,1],b[1,2],b[1,4],b[2,0],b[2,1],b[2,2],b[2,4],b[2,5]元素的值非零。
当使用布尔数组直接作为下标对象护着元组下标对象中有布尔数组时,都相当于用nonzero()将布尔数组转换成一组整数数组,然后使用整数数组进行下标计算。
nonzero(a)返回数组a中值不为零的元素的下标,它的返回值是一个长度为a.ndim(数组a的轴数)的元组,元组的每个元素都是一个整数数组,其值为非零元素的下标在对应轴上的值。例如对于1维布尔数组b1,nonzero(b1)所得到的是一个长度为1的元组,它表示b1[0]和b1[2]的值不为0(FALSE)。
对于二维数组b2,nonzero(b2)所得到的是一个长度为2的元组,它的第0个元素是数组a中值不为0的元素的第0个轴的下标,第一个元素则是第1轴的下标,因此从下面得到的结果可知b2[0,0] , n2[0,2]和b2[1,0]的值不为0:
当布尔数组直接做维下标时,相当于使用由nonzero()转换之后的元组作为下标对象:
3,常见的矩阵运算
3.1,矩阵相乘(*)
就是矩阵的乘法操作,要求左边矩阵的列和右边矩阵的行数要一致
3.2,矩阵点乘(multiply)
矩阵点乘则要求矩阵必须维数相等,即M*N维矩阵乘以M*N维矩阵
3.3,矩阵求逆变换(.I)
3.4,矩阵求转置(.T)
3.5,求矩阵对应列行的最大值,最小值,和。
计算每一列,行的和
计算最大,最小值和索引
3.6,矩阵的分隔和合并 (vstack hstack)
矩阵的分割,同列表和数组的分割一致
矩阵的合并
3.7,矩阵,列表,数组的转换
列表可以修改,并且列表中元素可以使不同类型的数据,如下:
numpy中数组,同一个数组中所有元素必须为同一个类型,有几个常见的属性:
numpy中的矩阵也有与数组常见的几个属性,他们之间的转换如下:
注意:当列表为一维的时候,将他们转换成数组和矩阵后,再通过tolist()转换成列表是不相同的,这里需要做一些小小的修改,如下:
矩阵转换成数值,存在以下一种情况:
4, matrix.getA()
getA()是numpy的一个函数,作用是将矩阵转成一个ndarray,getA()函数和mat()函数的功能相反,是将一个矩阵转化为数组。
如果不转,矩阵的每个元素将无法取出,会造成越界的问题,其具体解释如下:
举例如下:
那么为什么需要转换呢?
因为在画出数据集合的函数中,代码如下(取自机器学习实战Logistic回归最佳拟合直线的函数)
在这个代码,我们需要取出其中每一行每一列的值
如果是矩阵的话,我们测试一下:
可以发现我们取出矩阵的一行大小只有1,如果你使用b[1][1],b[1][2]之类的就会越界
当我们转为np.array类型时
可以看出,我们可以取出任何一个值。
Python矩阵的切片
1,行操作
2,列操作
Python numpy库其他函数用法
Numpy 的tile函数用法
tile函数位于Python模块numpy.lib.shape_base中,他的功能是重复某个数组,比如 tile(A,reps),功能是将数组A重复reps次,构成一个新的数组。
1,函数的定义与说明
函数格式为 tile(A,reps)
A和reps 都是array_like
A的类型众多,几乎所有类型都可以:array list tuple dict matrix 以及基本数据类型Int string float 以及bool类型。
reps 的类型也很多,可以是tuple list dict array int bool 但不可以是float string matrix类型。
2,示例
Numpy 范数的用法
顾名思义,linalg = linear + algebralinalg = linear + algebra , norm则表示范数,首先需要注意的是范数是对向量(或者矩阵)的度量,是一个标量(scalar):
np.linalg.norm(求范数):linalg=linear(线性)+algebra(代数)
首先:help(np.linalg.norm) 查看其文档:
norm(x, ord=None, axis=None, keepdims=False)
这里我们只对常用设置进行说明,x表示要度量的向量,ord表示范数的种类,axis表示向量的计算方向,keepdims表示设置是否保持维度不变。
用法:
示例:
范数理论告诉我们,一范数 >= 二范数 >= 无穷范数
参考文献:https://www.jb51.net/article/124939.htm
https://www.jb51.net/article/156112.htm
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
原文链接:https://www.cnblogs.com/wj-1314/p/10244807.html