您的位置:首页 > 编程语言 > Python开发

机器学习-Python-Numpy

2017-10-26 19:58 155 查看
         学习机器学习必须掌握基本的机器学习知识。本文主要讲解机器学习中需要用到的数学库

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<mylist.T)#矩阵元素比较

[[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、参考了郑捷等多位老师的书籍,还有部分资料来自互联网
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  pyhon numpy 机器学习