">

简明的Python教程之NumPy

摘要:Python作为一门简洁优美且功能强大的语言,越来越受编程人员的喜欢。在工业界和学术界也是非常受欢迎的编程语言。在python处理数据中,Numpy也是常有的工具,本文简要介绍,旨在大家熟悉相关应用。(本文原创,转载必须注明出处.)

导入相关的numpy包

import numpy
from numpy import array
from numpy import mat,matrix # 导入矩阵包
from numpy import shape  # 查看矩阵或数组的方法
from numpy import multiply # 元素相乘
import random


计算方法

向量求和

def nu_add():
    mm = array((1,1,1))
    pp = array((2,2,2))
    rr = mm + pp**3     # 数组的和运算
    print(rr)

运行结果:

[9 9 9]

矩阵相乘

def nu_matrix():
    ss = mat([1,2,3])     # 矩阵
    mm = matrix([1,2,3])
    print('an element: '.title()+str(mm[0,0]))   # 访问矩阵中的单个元素
    print('Number of dimensions of mm '.title()+str(shape(mm)))
    print('mat is equal matrix: '.title()+str(ss==mm))
    print('Matrix multiplication: '.title()+str(ss*mm.T))   # 矩阵相乘需要进行转置
    print('Multiplication of elements: '.title()+str(multiply(mm,ss))) # mm每个元素和ss每个元素相乘

运行结果:

An Element: 1
Number Of Dimensions Of Mm (1, 3)
Mat Is Equal Matrix: [[ True  True  True]]
Matrix Multiplication: [[14]]
Multiplication Of Elements: [[1 4 9]]

列表转化成矩阵

def nu_list_mat():
    pylist = [1,2,3]
    rr = mat(pylist) # 列表转化成矩阵
    print('list values: '.title()+str(pylist))
    print('rr type: '.title()+str(type(rr)))
    print('mat values: '.title()+str(rr))

运行结果:

List Values: [1, 2, 3]
Rr Type: <class 'numpy.matrixlib.defmatrix.matrix'>
Mat Values: [[1 2 3]]

矩阵求均值

def nu_mean():
    dd = mat([4,5,1])
    rr = dd.mean()           # 矩阵的均值
    print('mean of dd: '.title()+ str(rr))

运行结果:

Mean Of Dd: 3.3333333333333335

矩阵维度

def nu_mul_array():
    jj = mat([[1,2,3],[8,8,8]])
    print('Number of dimensions of jj '.title()+str(shape(jj)))
    one_row = jj[1,0:2]
    print(one_row)

运行结果:

Number Of Dimensions Of Jj (2, 3)
[[8 8]]

矩阵转置

def nu_tran_mat():    # 矩阵转置
    radMat = numpy.random.random((3,3))
    print('Before matrix transposition:\n '+str(radMat))
    print('After matrix transposition:\n '+str(radMat.T))

运行结果:

Before matrix transposition:
 [[0.44400432 0.39811184 0.15014053]
 [0.33399525 0.35953194 0.92571106]
 [0.3307816  0.38282677 0.01282852]]
After matrix transposition:
 [[0.44400432 0.33399525 0.3307816 ]
 [0.39811184 0.35953194 0.38282677]
 [0.15014053 0.92571106 0.01282852]]

矩阵的逆

def nu_inverse_mat():    # 矩阵的逆
    radMat = numpy.random.random((3,3))
    print('Before matrix inverse:\n '+str(radMat))
    print('After matrix inverse:\n '+str(mat(radMat).I))

运行结果:

Before matrix inverse:
 [[0.67119611 0.28502048 0.00101008]
 [0.66644679 0.61934535 0.39481694]
 [0.10938817 0.22939074 0.45364209]]
After matrix inverse:
 [[ 3.52467918 -2.38933642  2.07165582]
 [-4.79734922  5.63471564 -4.89336308]
 [ 1.57593243 -2.27312782  4.17923641]]

矩阵与逆矩阵相乘

def nu_mat_mul_imat(): # 矩阵与其逆矩阵相乘
    bmat = mat(numpy.random.random((3,3)))
    imat = bmat.I
    rus  = bmat * imat
    print(rus) # 结果是3*3的单位矩阵,其位置原则应该都是0,实际中是非常小的数,这个计算机处理的问题

运行结果:

[[ 1.00000000e+00 -2.23066267e-17 -3.47038713e-17]
 [-7.97119302e-17  1.00000000e+00  1.74271619e-17]
 [-3.16553513e-16 -8.86129567e-17  1.00000000e+00]]

参考文献

  1. Python官网
  2. 中文维基百科
  3. GitHub
  4. 图书:《机器学习实战》
  5. 图书:《自然语言处理理论与实战》

完整代码下载

源码请进【机器学习和自然语言QQ群:436303759】文件下载:自然语言处理和机器学习技术QQ交流

作者声明

本文版权归作者所有,旨在技术交流使用。未经作者同意禁止转载,转载后需在文章页面明显位置给出原文连接,否则相关责任自行承担。

白宁超 wechat
扫一扫关注微信公众号,机器学习和自然语言处理,订阅号datathinks!