zoukankan      html  css  js  c++  java
  • numpy快速入门

    列表推导式(非numpy部分)

    1.首先看看常规写法,这非常麻烦

    #常规写法
    >>> myList=[]
    >>> for item in a:
    ... myList.append(item*4)
    ...
    >>> myList
    [4, 8, 8, 8, 16, 20, 20]

    2.列表推导式写法,上式等于

    #列表推导式是这样子滴:
    >>> a=[1, 2, 2, 2, 4, 5, 5]
    >>> myList = [item*4 for item in a]
    >>> myList
    [4, 8, 8, 8, 16, 20, 20]

    3.列表推导更高级写法,只保留大于2的写法

    >>> a=[1, 2, 2, 2, 4, 5, 5]
    #只取原列表大于2的,来计算,其它不要
    >>> [item*4 for item in a if item>2] 
    [16, 20, 20]

     NumPy数组

     NumPy两种【基本数据类型】:【数组】 和 【矩阵】

    1.矩阵相加示例

    #例1,矩阵加法
    >>> from numpy import array
    >>> mm=array((1,1,1,))
    >>> pp=array((1,2,3))
    >>> mm+pp
    array([2, 3, 4])

    2.矩阵乘法示例

    #矩阵乘法,接例1
    from numpy import array
    >>> pp*2
    array([2, 4, 6])

    3.矩阵平方

    #平方示例,接例1
    >>> pp**2
    array([1, 4, 9], dtype=int32)

    4.矩阵除法

    #除法
    >>> pp/2
    array([0.5, 1. , 1.5])

    5.像列表中一样访问数组里的元素:

    #访问
    >>> pp[1]
    2

    6.其它:多维数组及访问,两个数组相乘、

    #NumPy中也支持多维数组:
    >>> jj = array([[1, 2, 3], [1, 1, 1]])
    #多维数组中的元素也可以像列表中一样访问:
    >>> jj[0]
    array([1, 2, 3])
    >>> jj[0][1]
    2
    #也可以用矩阵方式访问:
    >>> jj[0,1]
    2
    #=========================
    
    #当把两个数组乘起来的时候,两个数组的元素将对应相乘:
    >>> a1=array([1, 2,3])
    >>> a2=array([0.3, 0.2, 0.3])
    >>> a1*a2
    array([ 0.3, 0.4, 0.9])

    NumPy矩阵

    矩阵开始:1.导入模块、2.创建矩阵、3.访问矩阵元素、4.列表转矩阵

    #1.与使用数组一样,需要从NumPy中导入matrix或者mat模块:
    >>> from numpy import mat, matrix
    #2.创建矩阵(上述NumPy中的关键字mat是matrix的缩写,它们是同一种东西
    >>> ss = mat([1, 2, 3])
    >>> ss
    matrix([[1, 2, 3]])
    >>> mm = matrix([1, 2, 3])
    >>> mm
    matrix([[1, 2, 3]])
    
    #3.可以访问矩阵中的单个元素:
    >>> mm[0, 1]
    2
    
    #4.可以把Python列表转换成NumPy矩阵:
    >>> pyList = [5, 11, 1605]
    >>> mat(pyList)
    matrix([[ 5, 11, 1605]])

    ♦♦重点:矩阵相乘♦♦

    【运算原则:左矩阵的列数和右矩阵的行数必须相等】(1x3要和3x1才能相乘)

    矩阵数据类型的运算会强制执行数学中的矩阵运算,1×3的矩阵是不能与1×3的矩阵相乘的,所以以下会报错

    #以下是错误示例
    >>> ss*mm
    
    报错:
    Traceback (most recent call last):
      File "<pyshell#37>", line 1, in <module>
        ss*mm
      File "C:UsersAdministratorAppDataLocalProgramsPythonPython37libsite-packages
    umpymatrixlibdefmatrix.py", line 215, in __mul__
        return N.dot(self, asmatrix(other))
    ValueError: shapes (1,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)

    矩阵相乘办法1:(先转置,再相乘)

    #原ss
    >>> ss
    matrix([[1, 2, 3]])
    
    #转置后的ss .T即是转置的方法
    >>> ss.T
    matrix([[1],
            [2],
            [3]])
    #mm是这样的
    >>> mm
    matrix([[4, 5, 6]])
    
    #★★然后它们就能相乘了(mm的行数=ss.T的列数)
    >>> mm*ss.T
    matrix([[32]])

    shape查看矩阵 或 数组 维数:

    知道矩阵的大小有助于上述对齐错误的调试,可以通过NumPy中的shape方法来查看矩阵或者数组的维数:

    #输出结果(1,3)表示mm是一个1行3列的列表
    >>> shape(mm)
    (1, 3)

    矩阵相乘2,一一对应相乘multiply():

    【矩阵mm的每个元素】和【矩阵ss的每个元素】对应相乘。 即:元素相乘法

    #一一对应相乘办法multiply(乘)
    >>> from numpy import multiply
    >>> multiply(mm,ss)
    matrix([[ 4, 10, 18]])

    矩阵和数组排序 sort():

    注意该方法是原地排序(即排序后的结果占用原始的存储空间),所以如果希望保留数据的原序,必须事先做一份拷贝

    #默认从小到大升序排列
    >>> mm.sort()
    >>> mm
    matrix([[1, 2, 3]])

    排序2 argsort():

    使用argsort()方法得到矩阵中每个元素的排序序号

    #得到对应元素的排序序号
    >>> dd=mat([4, 5, 1])
    >>> dd.argsort()
    matrix([[2, 0, 1]])

    矩阵的均值,.mean():

    #均值
    >>> dd=mat([4, 5, 1])
    >>> dd.mean()
    3.3333333333333335

    多维数组取整行:(行号,:)

    #多维数组:
    >>> jj = mat([[1, 2, 3,], [8, 8, 8]])
    >>> shape(jj)
    (2, 3)
    
    #这是一个2×3的矩阵,要取出第1行元素,第0行元素,应该分别输入:
    >>> jj[1,:]
    matrix([[8, 8, 8]])

     >>> jj[0,:]
     matrix([[1, 2, 3]])

    取第1行第0列--第1列的元素(行号,列号:列号)

    #第1行,行0列—第2列
    >>> jj = mat([[1, 2, 3,], [4, 5, 6]])
    >>> shape(jj)
    (2, 3)
    >>> jj[1,0:2]
    matrix([[4, 5]])
    
    #
    >>> jj = mat([[1, 2, 3,], [4, 5, 6]])
    >>> shape(jj)
    (2, 3)
    
    >>> jj[0,1:2]
    matrix([[2]])
    >>> jj[1,1:]
    matrix([[5, 6]])
    >>> jj[1,2:]
    matrix([[6]])

    tile()把一个列表转成指定 行,列:

    #tile((列表或元组),(行,列))
    #把元组(0,1)转成2行1列的数组
    >>> tile((0,1),(2,1))
    array([[0, 1],
           [0, 1]])
    
    #把列表[1,2]转成2行1列的数组
    >>> tile([1,2],(2,1))
    array([[1, 2],
           [1, 2]])

    更多numpy:http://docs.scipy.org/doc/

  • 相关阅读:
    C#防止窗口重复打开
    c#image与byte数组的转换
    物理网卡地址
    C#[WinForm]实现自动更新
    js计算散点图方程式
    js遮罩效果
    js实现四舍六入 奇进偶舍
    ajax加载表格数据
    C#创建和调用WebService详细教程
    .NET中的CTS、CLS和CLR
  • 原文地址:https://www.cnblogs.com/chenxi188/p/11653378.html
Copyright © 2011-2022 走看看