机器学习-Python-Numpy

         学习机器学习必须掌握基本的机器学习知识。本文主要讲解机器学习中需要用到的数学库
numpy及其中常用运算函数的调用方法。

名词解释:

NumPy是Python的科学计算的基本包。 其中包括:
1、一个强大的n维数组对象
2、复杂的(广播)功能
3、工具集成的C / C++和Fortran代码
4、有用的线性代数,傅里叶变换,和随机数的能力
5、除了科学用途明显,NumPy也可以用作一个有效的 多维通用数据容器。任意数据类型可以 定义。这允许无缝地整合NumPy与广泛的数据库 品种。

一、产生矩阵
import numpy as np#导入NumPy库
>>> myzero=np.zeros([3,5])#创建一个3×5的全0矩阵
>>> print(myzero)
[[ 0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.]]


>>> myone=np.ones([3,5])#全1矩阵
>>> print(myone)
[[ 1.  1.  1.  1.  1.]
 [ 1.  1.  1.  1.  1.]
 [ 1.  1.  1.  1.  1.]]


>>> myrand=np.random.rand(3,4)#产生一个随机矩阵
>>> print(myrand)
[[ 0.19312948  0.41039358  0.76433973  0.99525369]
 [ 0.46374382  0.84419713  0.58257191  0.45753105]
 [ 0.22144017  0.02353384  0.43401975  0.64947979]]


>>> myeye=np.eye(3)#产生一个3维单位矩阵
>>> print(myeye)
[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  1.]]


二、矩阵的基本运算


1、加减
>>> from numpy import * #导入numpy包
>>> myone=ones([3,3])
>>> myeye=eye(3)
>>> print(myone+myeye)
[[ 2.  1.  1.]
 [ 1.  2.  1.]
 [ 1.  1.  2.]]
>>> print(myone-myeye)
[[ 0.  1.  1.]
 [ 1.  0.  1.]
 [ 1.  1.  0.]]


2、数乘矩阵
>>> mymatrix=mat([[1,2,3],[4,5,6],[7,8,9]])
>>> print(mymatrix)
[[1 2 3]
 [4 5 6]
 [7 8 9]]
>>> print(10*mymatrix)#数乘矩阵
[[10 20 30]
 [40 50 60]
 [70 80 90]]
3、矩阵中元素求和
>>> print (sum(mymatrix))#矩阵中元素求和
45


4、两个矩阵对应位置元素相乘
>>> mymatrix2=1.5*ones([3,3])
>>> print(mymatrix2)
[[ 1.5  1.5  1.5]
 [ 1.5  1.5  1.5]
 [ 1.5  1.5  1.5]]
>>> print(multiply(mymatrix,mymatrix2))#两个矩阵对应位置元素相乘
[[  1.5   3.    4.5]
 [  6.    7.5   9. ]
 [ 10.5  12.   13.5]]


5、矩阵元素的平方
>>> mylist=mymatrix#赋值
>>> print(power(mylist,2))#矩阵元素的平方
[[ 1  4  9]
 [16 25 36]
 [49 64 81]]
>>> print(power(mylist,3))
[[  1   8  27]
 [ 64 125 216]
 [343 512 729]]


6、矩阵乘矩阵
>>> from numpy import *
>>> mymatrix3=mat([[1],[2],[3]])#创建一个列向量
>>> print(mymatrix3)
[[1]
 [2]
 [3]]
>>> print(mymatrix*mymatrix3)#矩阵乘矩阵
[[14]
 [32]
 [50]]


7、求转置
>>> print(mymatrix.T)#求转置
[[1 4 7]
 [2 5 8]
 [3 6 9]]
>>> mylist.transpose()#求转置的另一种方法
matrix([[1, 4, 7],
        [2, 5, 8],
        [3, 6, 9]])


8、计算矩阵行列数
>>> print(mylist)
[[1 2 3]
 [4 5 6]
 [7 8 9]]
>>> [m,n]=shape(mylist)#计算矩阵行列数
>>> print(m,n)
3 3


9、按行切片
>>> myscll=mylist[0]
>>> print(myscll)#按行切片
[[1 2 3]]


10、按列切片
>>> myscll1=mylist.T[0]
>>> print('按列切片:',myscll1)
SyntaxError: invalid character in identifier
此处按正常逻辑发生了报错换成下面的输出就行了
>>> print('按列切片:%s'%(myscll1))
按列切片:[[1 4 7]]
我估计应该是python版本的原因,还有就是输出print在2.0版本的时候不需要加(),3.5输出为print(参数)


11、矩阵复制
>>> mylist1=mylist.copy()#矩阵复制,直接赋给变量也行
>>> print(mylist1)
[[1 2 3]
 [4 5 6]
 [7 8 9]]


12、矩阵元素比较
>>> print(mylist [[False  True  True]
 [False False  True]
 [False False False]]


13、矩阵的行列式
>>> a=mat([[1,2,4,5,7],[9,12,11,8,2],[6,4,3,2,1],[9,1,3,4,5],[0,2,3,4,1]])
>>> print(a)
[[ 1  2  4  5  7]
 [ 9 12 11  8  2]
 [ 6  4  3  2  1]
 [ 9  1  3  4  5]
 [ 0  2  3  4  1]]
>>> print(linalg.det(a))#矩阵的行列式
-812.0
>>> print('det(a):',linalg.det(a))
det(a): -812.0


14、矩阵的逆
>>> inva=linalg.inv(a)#矩阵的逆
>>> print(inva)
[[-0.07142857 -0.01231527  0.05295567  0.09605911 -0.00862069]
 [ 0.21428571 -0.37684729  1.22044335 -0.46059113  0.3362069 ]
 [-0.21428571  0.82512315 -2.04802956  0.56403941 -0.92241379]
 [ 0.         -0.4137931   0.87931034 -0.17241379  0.81034483]
 [ 0.21428571 -0.06650246  0.18596059 -0.08128079 -0.14655172]]


15、矩阵的对称
>>> aT=a.T
>>> print(aT)
[[ 1  9  6  9  0]
 [ 2 12  4  1  2]
 [ 4 11  3  3  3]
 [ 5  8  2  4  4]
 [ 7  2  1  5  1]]
>>> print(a*aT)#矩阵的对称
[[ 95 131  43  78  43]
 [131 414 153 168  91]
 [ 43 153  66  80  26]
 [ 78 168  80 132  32]
 [ 43  91  26  32  30]]


16、矩阵的秩
>>> print(linalg.matrix_rank(a))#矩阵的秩
5




17、可逆矩阵求解
b=mat([[1,0,1,0,1]])
>>> print(b)
[[1 0 1 0 1]]
>>> print(b.T)
[[1]
 [0]
 [1]
 [0]
 [1]]
>>> s=linalg.solve(a,b.T)#可逆矩阵求解
>>> print(s)
[[-0.0270936 ]
 [ 1.77093596]
 [-3.18472906]
 [ 1.68965517]
 [ 0.25369458]]


注意:
1、不同的python版本操作方法有一些差异或也可能和库的版本有关,请读者自行注意
2、随机矩阵输出结果不一定一样
3、参考了郑捷等多位老师的书籍,还有部分资料来自互联网






你可能感兴趣的:(机器学习)