机器学习-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、参考了郑捷等多位老师的书籍,还有部分资料来自互联网
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、参考了郑捷等多位老师的书籍,还有部分资料来自互联网
相关文章推荐
- 机器学习-Python scikit-learn 安装numpy,SciPy,matplotlib
- 机器学习中数据处理与可视化的python、numpy等常用函数
- centos7安装python机器学习相关环境numpy,scipy,sklearn,lda
- 机器学习笔记--Python之Numpy
- 在windows上安装python的机器学习包numpy scipy scikit_learn matplotlib
- python 机器学习的开发环境搭建(numpy,scipy,matplotlib)
- python机器学习--01.windows下pip安装numpy、scilik-learn、pandas库
- Python 机器学习有关机器学习工具包(Numpy、Theano、Caffe等)安装汇总
- Python2.7+pycharm Win7 64bit安装教程 附:机器学习numpy+scipy+sklearn安装组
- 机器学习之Python安装和numpy配置
- python机器学习包 Windows下 pip安装 scikit-learn numpy scipy
- Python 机器学习的开发环境搭建(numpy,scipy,matplotlib)
- [机器学习]Python中Numpy,Pandas,Matplotlib,Scipy,Seaborn介绍
- 机器学习之旅-重要的Python库:Numpy
- Python机器学习(一)--Numpy基础
- python机器学习包 Windows下 pip安装 scikit-learn numpy scipy
- Python机器学习:numpy的应用之基本操作命令
- python机器学习及实践(从零开始kaggle竞赛之路)第二章的2.1.2.5集成模型程序报错:numpy.core._internal.AxisError: axis 0 is out of bo
- Python 机器学习基础(二)——Numpy