• [Python学习] python 科学计算库NumPy—矩阵运算


    NumPy库的核心是矩阵及其运算。

    使用array()函数可以将python的array_like数据转变成数组形式,使用matrix()函数转变成矩阵形式。

    基于习惯,在实际使用中较常用array而少用matrix来表示矩阵。

    然后即可使用相关的矩阵运算了

    import numpy as np
    a = [[1,2,3],[4,5,5],[4,5,5]]
    
    len = a.shape[0] #多维数组的行数
    print(a.dtype) #输出元素类型
    #另外也还可以使用切片方式来处理数组

    然后是涉及到的ufunc(universal function)运算,它是一种能对数组的每个元素进行操作的函数。NumPy内置的许多ufunc函数都是在C语言级别实现的,因此它们的计算速度非常快。

    1 >>> x = np.linspace(0, 2*np.pi, 10)
    2 # 对数组x中的每个元素进行正弦计算,返回一个同样大小的新数组
    3 >>> y = np.sin(x)
    4 >>> y
    5 array([  0.00000000e+00,   6.42787610e-01,   9.84807753e-01,
    6          8.66025404e-01,   3.42020143e-01,  -3.42020143e-01,
    7         -8.66025404e-01,  -9.84807753e-01,  -6.42787610e-01,
    8         -2.44921271e-16])

    有的通用运算函数有:

    np.sin()

    np.cos()

    np.add(a,b)

    a.sum(axis=0,1)#axis为0计算全部数据的和,为1则按行计算数据的和

    等等其它矩阵可参与的数据计算。

    a = array([[1,2,3],[2,3,4]])

    array(list): 创建矩阵或高维向量,例如a = array([[0,1,2,3],[4,5,6,7]]),传入参数也可以是元组

    shape: 表示向量大小的元组,例如a.shape结果为tuple,形如(2,3)

    ndim: 表示矩阵或高维向量的维数,例如矩阵a的a.ndim为2

    size: 表示向量总元素数

    itemsize: 表示元素所占字节数

    nbytes: 表示向量所占字节数

    real: 所有元素的实部,返回的还是矩阵形式

    imag: 所有元素的虚部,返回的还是矩阵形式

    flat: 用一维数组表示矩阵或高维向量(常用于顺序遍历)

    T: 表示矩阵的转置矩阵(也适用于高维向量),例如:a.T

    zeros(shape): 创建全0矩阵或高维向量,例如a = zeros((2,3))

    ones(shape):创建全1矩阵或高维向量,例如a = ones((2,3))

    add(matrix):将矩阵对应元素相加,结果相当于直接用加号

    dot(matrix) 
    矩阵乘法,注意必须满足“能乘”的要求 
    如果是*,则需注意: 

     1 aaa = array([[10,9,8],[7,6,5],[42,33,2]])
     2 a = aaa.min(0)  #取每一列的最小值,返回的是一个数组
     3 aaa*aaa#相当于aaa**2:
     4 
     5 #[[ 100,   81,   64],
     6 # [  49,   36,   25],
     7 # [1764, 1089,    4]]
     8 
     9 aaa*a  #aaa每行元素分别与a相乘,结果为
    10 
    11 #[[ 70,  54,  16],
    12 # [ 49,  36,  10],
    13 # [294, 198,   4]]
    14 
    15 a*aaa  #结果与上相同
    16 3*aaa  #aaa中每个元素乘以3

    reshape(shape) 
    得到改变形状的矩阵,例如a = array([[1,2,3],[4,5,6]]).reshape((3,2))的结果为[[1,2],[3,4],[5,6]]。注意矩阵的大小不能改变,即reshape的参数表示的矩阵元素数必须等于原矩阵的元素数。 
    transpose() 
    得到矩阵的转置矩阵,a.transpose()相当于a.T 
    swapaxes(d1,d2) 
    调换给定的两个维度 
    flatten() 
    返回对应一维向量,例如:

    1 aaa = array([[10,9,8],[7,6,5],[42,33,2]])
    2 aaa.flatten()
    3 #返回值为:
    4 array([10,  9,  8,  7,  6,  5, 42, 33,  2])

    tolist() 
    得到矩阵对象转化为list的结果

    1 aa = aaa.tolist()
    2 aa返回为list型(每一行又是一个子list):
    3 [[10, 9, 8], [7, 6, 5], [42, 33, 2]]
    4 aa[0]  
    5 #返回为:
    6 [10, 9, 8]

    min(axis) 
    得到所有元素中的最小值。当给定axis值(min(0)或min(axis=0))时,在该坐标上求最小值(得到数组) 
    例如:

     1 aaa = array([[10,9,8],[7,6,5],[42,33,2]])
     2 aaa.min() 
     3 返回为:aaa矩阵中所有元素的最小值
     4 结果为:2
     5 aaa.min(0) 
     6 返回为:aaa矩阵中所有列中元素的最小值
     7 结果为:array([7, 6, 2])
     8 aaa.min(1)
     9 返回为:aaa矩阵中所有行中元素的最小值
    10 结果为:array([8, 5, 2])

    max(axis) 
    得到所有元素中的最小值。缺省参数axis作用和min()相同 
    sum() 
    得到数组元素之和,得到的是一个数字。

    也可以aaa.sum(axis),分别求每一行或者是每一列的元素之和

    cumsum() 
    得到累计和,即依次加一个元素求和的一维数组。 
    例如:

    1 aaa.cumsum()
    2 结果为:array([ 10,  19,  27,  34,  40,  45,  87, 120, 122])

    prod() 
    得到数组所有元素之积,是个数字。也可以aaa.sum(axis),分别求每一行或者是每一列的元素之积

    cumprod() 
    得到累计积,例子形式与上面cumsum()相同,这两个函数也都可以分坐标累计加和累计乘。 
    mean() 
    得到元素的平均数 
    all() 
    如果所有元素为真,返回真;否则返回假 
    any() 
    如果所有元素只要有一个真,返回真;否则返回假。 
    特征值 
    linalg.eigvals() 
    返回A的特征值 
    linalg.eig(A) 
    返回A的特征值和特征向量,例如(eval, evec) = linalg.eig(A),其中eval的对角元为A的各个特征值,evec对应各列是相应特征向量。

     1 >>> a = array([[-1,1,0],
     2                [-4,3,0],
     3                [ 1,0,2]])
     4 >>> eval, evec = linalg.eig(a)
     5 >>> eval
     6 array([ 2.,  1.,  1.])
     7 >>> evec
     8 array([[ 0.        ,  0.40824829,  0.40824829],
     9        [ 0.        ,  0.81649658,  0.81649658],
    10        [ 1.        , -0.40824829, -0.40824829]])

    即特征向量为λ1=2的(0,0,1)和λ2=λ3=1的(0.4,0.8,-0.4)

  • 相关阅读:
    mouseover、mouseout,mouseenter、mouseleave区别
    第一篇博客,就真的是随笔,写写最近的状况。
    MySQL日期时间函数大全 转
    解决Eclipse中SVN版本信息不显示的问题
    android 环境变量配置,以及sdcard配置
    服务器Out of Memory
    Android SDK Manager 更新时的“https://dl-ssl.google.com refused”错误
    不可变的原始值和可变的对象引用
    null和undefined
    HTML 表单
  • 原文地址:https://www.cnblogs.com/yushuo1990/p/5879596.html
Copyright © 2020-2023  润新知