Python的优缺点
虽然Java或C等强类型语言也有矩阵数据库,但即使是简单的操作也需要编写大量的代码才能完成,相比之下Python较为简单、清晰而且易于了解,但Python身为高级编程语言的缺点是性能问题,其程序的运行效率不如Java或者C高,但我们仍能够透过Python调用C编译的代码,同时利用两者的优点。
Numpy函数库
机器学校算法涉及到很多线性代数的知识,故此时可以调用Numpy函数库来协助我们将数据化成矩阵形式。
进入Python Shell:
打开CMD(命令提示单元)输入python
后回车即可进入CMD
导入Numpy函数库:
在Python Shell开发环境中输入
>>> from numpy import *
即可导入,此时可以测试一下
输入
>>> random,rand(4,4)
返回
array([[0.87229069, 0.70023991, 0.7521162 , 0.9213054 ],
[0.02586772, 0.5548208 , 0.28103148, 0.49242565],
[0.61887028, 0.08988251, 0.51350345, 0.56281089],
[0.38425784, 0.50601015, 0.89603609, 0.5991036 ]])
上述命令构造了一个4*4的随机数组(每个计算机及每次输入结果皆会变化)
注意:这边是数组形式
Numpy矩阵与数组的区别
Numpy中有两种数据类型(矩阵matrix和数组array),都可以用来处理行列表示的数字元素。虽然看起来很相似,但这两个数据类型上执行相同的数学运算可能得到不同的结果,其中Numpy函数库中的martix与MATLAB中的matrices等价。
shape()函数:查看矩阵或数组的维度
>>> shape(array)
若矩阵有m行n列则返回(m,n)
>>> array.shape[0]
返回矩阵的行数m,参数为1的话返回列数n
tile()函数:将数组A作为元素构造出m行n列的数组
>>> tile(2,(3,3))
返回
array([[2, 2, 2],
[2, 2, 2],
[2, 2, 2]])
mat()函数:将数组转成矩阵
>>> mat(random.rand(4,4))
返回
matrix([[0.65212284, 0.83811254, 0.77794013, 0.08255835],
[0.87573375, 0.66102126, 0.20329506, 0.28459432],
[0.84541585, 0.38251998, 0.39339992, 0.64757986],
[0.95867266, 0.06996467, 0.45438577, 0.16584662]])
上述命令构造了一个4*4的随机矩阵(每个计算机及每次输入结果皆会变化)
注意:这边是矩阵形式
.I操作符:对矩阵求逆矩阵
>>> matrix.I
返回矩阵matrix的逆矩阵
eye()函数:创建单位矩阵
函数eye(4)能创建4*4的单位矩阵
>>> eye(4)
返回
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
注意:这边是数组形式,若要用矩阵形式可以配合mat()进行转换
sum(axis)函数:当axis为1则按行累加,当axis为0则是按列累加
>>> i=tile(2,(3,3))
>>> i.sum(axis=1)
返回
array([6, 6, 6])
argsort()函数:得到矩阵中每个元素的排序序号
>>> i=tile(2,(3,3))
>>> i.argsort()
返回
array([[0, 1, 2],
[0, 1, 2],
[0, 1, 2]], dtype=int64)
dict.get(key,x)函数:从字典中获取key对应的value,字典中没有key的话返回0
min()函数,max()函数:返回一个数组,数组中的每个数都是他所在行或列的最大值或者最小值
>>> array.min(0)
返回一个数组,数组中每个数都是它所在列的所有数的最小值
>>> array.min(1)
返回一个数组,数组中每个数都是它所在行的所有数的最小值
listdir(‘str’)函数:读取目录底下所有的文件
>>> strlist=listdir('str')
读取目录下所有文件后,返回一个字符串列表
split()函数:切片函数
>>> string.split('str')
以字符str为分隔符切片,返回list
可以用list[0]取用分隔符前段
或list[1]取用分隔符后段