zoukankan      html  css  js  c++  java
  • Python学习之数组类型一:

    Python学习之数组类型一:

    Numpy中的向量与矩阵:

    1.创建:  向量、矩阵均由array函数创建,区别在于向量是v=array( [逗号分隔的元素] )

    矩阵是M=array( [[ ]] )  注意矩阵是双方括号

    向量可以执行基本的线性代数运算(运算是基于元素的运算),例如标量乘法/除法、线性组合、范数、标量积等。

    2.访问数组项  向量索引与切片类似于字符串与列表

                    通过索引访问矩阵(数组项),需要两个索引来访问,这些索引都在一对方栝号里。  例如:M[2:4,1:4]   表示行与列的切片

    一些切片原则:

     矩阵[index,index]    得到维数为0的标量

     矩阵[索引,切片]或者[切片,索引]   得到维数为1的向量

     矩阵[切片,切片]    得到维数为2的矩阵

    使用切片修改(替换)矩阵中的一个元素,一整行,整个子矩阵。

    3.数组构造函数----用于一些构造数组的命令生成特殊的矩阵。

    v=array([3.,5.,8.])

    ① I=diag(v,0)   #diag(v,k)  生成的结果是来自向量V的对角n阶方阵,k列元素均为零    

    print(I)

    ② T=zeros((2,2,3))   #张量T(向量、矩阵或更高阶张量)的函数ndim给出的维数总是等于其形状的长度

    print(T)

    print(ndim(T))       #使用数组属性T.ndim或者函数numpy.nidm 来获取数组的维数

    print(shape(T))       #数组属性:shape获取数组的维度  例如(23)表示二行三列矩阵

    print(len(shape(T)))

    ③ A=ones((2,3))    #生成的是由1填充的23列的矩阵

    print(A)

    ④ T=random.rand(3,3)    #random.rand(n,m) 生成由(01)中平均分布的随机数(填充)构成的nm列矩阵

    print(T)

    ⑤ A=arange(3)      #arange(n)返回元素为前n个整数的向量

    print(A)

    ⑥ v=linspace(1,2,4)    #linspace(a,b,n)生成由平均分布在ab之间的n个点组成的向量

    print(v)

    ⑦ I=identityn)     #生成阶数为n的单位矩阵

    1. 访问和修改数组形状

    访问:用reshape函数或者数组属性shape 来访问

    数组的形状是元组,例如n*m的矩阵的形状是元组(nm

    矩阵:shapeA)  #返回矩阵的形状(n,m

    向量:shapev)   #返回(n, )  注意:向量形状是包含向量长度n的单元素元组

    修改数组形状:是指在不复制数据的情况下给出数组的新视图。

    1. 重塑reshape()函数    

    例如:

    v=array([0,1,2,3,4,5])

    M=v.reshape(2,3)     #reshape()函数在不复制数据的情况下给出了一个数组的新视图

    #将向量v生成一个二行三列的矩阵

    print(M)

    print(shape(M))   #返回(23

    M[0,0]=10

    print(v)   #v=[10,1,2,3,4,5]现在的v[0]10     注意:更改M中的M中的一个元素导致v

                                            #中相应的元素自动地发生变化。

    v=array([1,2,3,4,5,6,7,8])

    M=v.reshape(2,-1)           #仅指定一个形状也很方便,并让python以与原始形状相乘的方式来确定另一个形状参数

                          #通过设置自由形状参数-1来实现

    print(shape(M))     #返回(24)两行四列的矩阵

    print(M)

    M=v.reshape(-1,2)

    print(shape(M))    #返回形状(42)的矩阵

    print(M)

    M=v.reshape(3,-1)    #如果尝试不与初识形状值相乘的形状的数组,则返回错误

    print(shape(M))

    1. 转置  矩阵转置与向量有所区别:

     例如:A = array([[1.,2.],[3.,4.]])

    B=A.T         #转置矩阵用  矩阵.T即(A.T)来切换矩阵的两个形状元素

    print(A)

    print(B)

    A[1,1]=5.

    print(B[1,1])   #返回5

    注意:v.T返回相同的向量

    v=array([1.,2.,3.])          #转置向量,使用---向量.reshape()---来实现

    print(v.T)

    print(v.reshape(1,-1))     #v的行向量

    print(v.reshape(-1,1))     #返回v的列向量

        2.叠加:

    #叠加     concatennate()方法

    a1=array([[1.,2.,3.],[4.,5.,6.]])     

    a2=array([[0.,1.,3.],[7.,8.,9.]])

    A=concatenate((a1,a2),axis=1)     #构造矩阵的通用方法concatenate((a1,a2,...),axis=0/1)

    print(A)                        #前提是用一对相匹配的子矩阵,axis=0时,子矩阵垂直叠加;axis=1时,子矩阵水平叠加

    #假设有一个长度为2n的向量,要对具有偶数个分量的向量执行偶排列

    v=array([0,1,2,3,4,5,6,7,8,9])

    def symp(v):

        n=len(v)//2

        return hstack([v[-n:],-v[:n]])

    print(symp(v))        #将符号变化的向量的前半部分和后半部分进行交换

  • 相关阅读:
    JavaScript实现类的private、protected、public、static以及继承
    OSS网页上传和断点续传(STSToken篇)
    OSS网页上传和断点续传(OSS配置篇)
    Linq sum()时遇到NULL
    SQLSERVER事务日志已满 the transaction log for database 'xx' is full
    笔记本高分辨软件兼容问题,字体太小或模糊
    H5上传图片之canvas
    An error occurred while updating the entries. See the inner exception for details.
    无限级结构SQL查询所有的下级和所有的上级
    SQLserver 进程被死锁问题解决
  • 原文地址:https://www.cnblogs.com/chenzhijuan-324/p/10577513.html
Copyright © 2011-2022 走看看