python

windows+python

python环境

  1. 安装python
    下载python,并安装。
  2. 使用pip安装numpy
    进入cmd窗口输入pip -v,查看是否安装pip。若已经安装则,下载numpy包,然后cd 下载目录,使用pip install package.whl安装,若未安装则先安装pip。
  3. 安装matplotlib
    参考:python/pip/numpy/matplotlib安装

python学习

  1. 例子多:
    python和numpy简介
    python快速入门教程

  2. 语法多:
    python教程
    python文档

  3. 命令行查看语法
    查看python的模块和函数帮助文档方法:

    1
    2
    3
    import 模块
    dir(模块名) 查看模块下的函数
    help(模块名.函数)查看函数信息,内建函数直接查看

python工具包

  1. matplotlib
    python2D绘图库,可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
    matplotlib基本图和自定义图绘制
    numpy和matplotlib基本用法

  2. numpy
    科学计算基本库,具有N维数组对象,复杂的(广播)函数,集成c/c++和fortran代码的工具
    ,线性代数,傅里叶转换,随机数,能被用作常用数据的多维容器。
    numpy官网

  3. PIL
    python 图像处理库,支持许多文件格式,提供了有利的图像处理能力。
    PIL官网

  4. opencv-python
    opencv-python是为解决计算机视觉问题设计的python绑定库,使用numpy,所有的opencv 数组结构被转化为Numpy数组或者来自Numpy数组。
    [opencv-python])(https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_setup/py_intro/py_intro.html#intro)

  5. python Tesseract
    Python-tesseract是Python的光学字符识别(OCR)工具。它会识别和“读取”嵌入在图像中的文本。
    Python Tesseract

  6. urllib
    urllib是一个收集几个模块来处理URL的软件包:
    urllib.request用于打开和阅读URLs
    urllib.error包含urllib.request引发的异常
    urllib.parse解析URL
    urllib.robotparser用于解析robots.txt文件
    urllib

  7. cookielib
    cookielib模块定义了用于自动处理HTTP cookie的类。对于访问需要小块数据的网站(cookie)是有用的。cookie通过来自Web服务器的HTTP响应在客户机上设置,然后在稍后的HTTP请求中返回到服务器。
    注:cookielib模块已经在Python 3中重命名为http.cookiejar。当将源代码转换为Python 3时,2to3工具将自动适应导入。
    cookielib

  8. requests
    requests是一个优雅而简单的用于Python的HTTP库,为人类构建。
    requests

python模块

  1. subprocess
    使用subprocess fork一个子进程,并运行外部的程序。
    Python subprocess模块学习总结

实践问题:

  1. 32bit的python安装不了64bit的numpy包
    具体:python:3.6.3 numpy:numpy-1.13.3-cp27-none-win_amd64.whl (md5, pgp)
    回答:一是要位数对应,32bit对应32bit,64bit对应64bit
    二是要python版本对应cp27代表CPython2.7,应该下载cp36

  2. AttributeError: ‘dict’ object has no attribute ‘iteritems’
    python3的改变,iteritems=>items

  3. 对库函数不熟悉的情况下,最好的方法是找到User Guide
    sklearn user guide
    numpy user guide
    pandas user guide
    xgboost user guide

  4. numpy掩码数组
    一个掩码数组由一个正常数组和一个布尔数组组成,布尔数组中值为True的元素表示正常数组中对应下标的值无效,False表示有效。
    参考:掩码数组numpy.ma.mask

  5. 没有缩进
    python中出现IndentationError:unindent does not match any outer indentation level有的地方使用了tab有的地方使用了空格

  6. NameError: name ‘reload’ is not defined
    需要引进不同的库:

    =3.4 : import importlib importlib.reload(sys)
    <=3.3 : import imp imp.reload(sys)
    2.x : import sys sys.setdefaultencoding(“utf-8”)

  7. 引入模块的时候不要.py后缀,不然会报ModuleNotFoundError

  8. TypeError: cannot perform reduce with flexible type
    使用numpy的var,sum时出现错误

  9. TypeError: ‘builtin_function_or_method’ object is not subscriptable
    内建方法不是subscriptable,即不能使用[]而是使用()

  10. python不支持步长为小数,numpy支持
    例子,np.arange(1,5,.5)

  11. TypeError: list indices must be integers or slices, not tuple
    yRel = testdata[:,-1] #当testdata是一维数组时就会发生错误

  12. TypeError: ‘dict_keys’ object does not support indexing
    原因:由于python3改变了dict.keys,返回的是dict_keys对象,支持iterable 但不支持indexable:
    解决办法:将其明确的转化成list,dict_keys不支持索引

    1
    2
    3
    a = {0:'左左',1:'右右'}  
    k = list(a.keys())
    print(k[0])#输出0
  13. IndexError: invalid index to scalar variable.
    比如一维数组使用了二维指针访问

  14. word插入代码
    word代码排版

  15. TypeError: data type not understood
    np.ones参数错误

  16. Numpy matrix must be 2-dimensional error
    用矩阵下标获取的依然是矩阵对象而不是标量

  17. Numpy多维矩阵转一维数组
    多维矩阵转list .tolist()
    list,array互换 np.array(),np.ndarray.tolist()

例子

  1. 矩阵转置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    array([[[ 0,  1,  2,  3],
    [ 4, 5, 6, 7],
    [ 8, 9, 10, 11]],

    [[12, 13, 14, 15],
    [16, 17, 18, 19],
    [20, 21, 22, 23]]])
    transpose(1,0,2)可以理解成最高维度和次高维度的交换
    首先将次高纬度分成3(维度)部分,则有
    [0,1,2,3],[4,5,6,7],[8,9,10,11]三部分然后最高维度为2
    添加到次高维度则有
    [0,1,2,3],[12,13,14,15]
    [4,5,6,7],[16,17,18,19]
    [12,13,14,15],[20,21,22,23]
    所以transpose(1,0,2)的结果为:
    array([[[ 0, 1, 2, 3],
    [12, 13, 14, 15]],

    [[ 4, 5, 6, 7],
    [16, 17, 18, 19]],

    [[ 8, 9, 10, 11],
    [20, 21, 22, 23]]])
  2. 矩阵旋转:
    多维矩阵转置,其实是矩阵维度的倒序:
    [[1,2,3],[4,5,6]]=>[[1,4],[2,5],[3,6]]
    (2,3)=>(3,2)
    transpose(0,1,2)是原来维度的顺序,transpose(0,2,1)则可以看作是低维度1,2的交换即转置。
    transpose(2,1,0)则是0,2维度的交换。
    (m,n)矩阵转置就是交换维度,将n维向量,有序分散到m维的维度,形成(n,m)矩阵。示例1.
    (m,n)矩阵旋转,维度向量增加的方向,就是轴的指向。如下所示.
    numpy旋转函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    >>> m = np.array([[1,2],[3,4]], int)
    >>> m
    array([[1, 2],
    [3, 4]])
    >>> np.rot90(m)
    array([[2, 4],
    [1, 3]])
    >>> np.rot90(m, 2)
    array([[4, 3],
    [2, 1]])
    >>> m = np.arange(8).reshape((2,2,2))
    >>> np.rot90(m, 1, (1,2))
    array([[[1, 3],
    [0, 2]],
  3. 获取矩阵每行

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [[1,2,3],
    [4,5,6],
    [7,8,9]]

    a = a[2].tolist() #array([[7,8,9]])
    a[0][1] == 8
    如果使用a[2],有[[7.8.9]]
    a[0][0] == [7,8,9]
    a[0][0][0] == [7,8,9]
-------------本文结束感谢您的阅读-------------
鼓励鼓励!