zoukankan      html  css  js  c++  java
  • NUMPY的学习之路(2)——索引,合并,分割,赋值

    一、索引

    1.1numpy数组的转置

    A=np.arange(3,15).reshape(3,4)
    print(A)
    
    print(A[2][0])
    print(A[2,1])
    print(A[2,:])#用冒号代替这一行所有的数  第二行的所有的数
    print(A[:,1])#第一列的所有数
    # 第一行的从1到3的值
    print(A[1,1:3])

    结果:

    1.2矩阵的转置以及将矩阵转化为array

    A=np.arange(3,15).reshape(3,4)
    print(A)
    for col in A.T:
        #迭代a的列就是 迭代A的转置的行
        print(col)
    
    a=A
    print(a.flatten())#返回被改变的array
    for item in a.flat:#a.flat 表示的是一个迭代期
        print(item)

    结果:

    二、矩阵的合并

     2.1基本上用 concatenate函数对矩阵进行合并

    # array的合并
    a=np.array([1,1,1])
    b=np.array([2,2,2])
    
    c=np.vstack((a,b))#纵向叠加成矩阵
    print("纵向叠加:")
    print(c)
    print("为了之后的合并,我们对array进行reshape")
    a=a.reshape(3,1)
    print("reshape a:")
    print(a)
    b=b.reshape(3,1)
    print("reshape b:")
    print(b)
    print("左右合并:")
    d=np.hstack((a,b))#左右合并成一个矩阵 如果是序列的话 就是序列+序列=序列
    print(d)
    #
    # # 想把a变成一个竖向的序列
    # print(a.reshape(3,1))
    
    # 多个arrayd 纵向或者横向的合并
    print("多个矩阵或者array的合并")
    c=np.concatenate((a,b,b,a),axis=0)#0是在上下的维度进行合并 按列合并
    print("在上下维度合并")
    print(c)
    c=np.concatenate((a,b,b,a),axis=1)#0是在左右的维度进行合并 按行合并
    print("在左右维度合并")
    print(c)

    结果:

    纵向叠加:
    [[1 1 1]
     [2 2 2]]
    为了之后的合并,我们对array进行reshape
    reshape a:
    [[1]
     [1]
     [1]]
    reshape b:
    [[2]
     [2]
     [2]]
    左右合并:
    [[1 2]
     [1 2]
     [1 2]]
    多个矩阵或者array的合并
    在上下维度合并
    [[1]
     [1]
     [1]
     [2]
     [2]
     [2]
     [2]
     [2]
     [2]
     [1]
     [1]
     [1]]
    在左右维度合并
    [[1 2 2 1]
     [1 2 2 1]
     [1 2 2 1]]
    
    Process finished with exit code 0

    三、矩阵的分割

    3.1等量的分割

    a=np.array([1,1,1])
    b=np.array([2,2,2])
    # array的分割
    a=np.arange(12).reshape(3,4)
    print(a)
    
    print(np.split(a,2,axis=1))#要切割的矩阵 分割为几块 分割为行还是列   1表示分割为行(这里把行分为2列)
    print(np.split(a,3,axis=0))#按列分为三块 把每一列分为三块 这边最好还是注意下axis 的值和对应的意思

    结果:

    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
    [array([[0, 1],
           [4, 5],
           [8, 9]]), array([[ 2,  3],
           [ 6,  7],
           [10, 11]])]
    [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
    
    Process finished with exit code 0

    3.2不等量的分割

    a=np.arange(12).reshape(3,4)
    print(a)
    # 如何进行不等量的分割
    a=np.array_split(a,3,axis=1) #这里是把每行元素分成了三份
    print(a)

    结果:

    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
    [array([[0, 1],
           [4, 5],
           [8, 9]]), array([[ 2],
           [ 6],
           [10]]), array([[ 3],
           [ 7],
           [11]])]
    
    Process finished with exit code 0

    3.3分割的其它办法

    # array的分割
    a=np.arange(12).reshape(3,4)
    print(a)
    
    # 分割的其它办法
    print(np.vsplit(a,3))#v代表垂直分割
    print(np.hsplit(a,2))#h代表水平分割

    结果:

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

    四、array的相关赋值

    其实就是就是如果想不相关,但是值是一样,那就用.copy(),这就叫深度复制

    # array的相关赋值
    a=np.arange(4)
    print(a)
    b=a#b就是指向ad 引用
    c=a
    d=b
    a[0]=11
    print(a)
    print(b)
    print(b is a)#可以看下是不是同一个a
    print(a is d)#发现是同一个维度的
    d[1:3]=[22,33]
    print(a)#你改了不管其中那一个 都会变的
    # 如果我们不想关联起来
    b=a.copy()#deep copy 赋值但没有关联
    a[3]=44
    print(a)
    print(b)

    结果:

    [0 1 2 3]
    [11  1  2  3]
    [11  1  2  3]
    True
    True
    [11 22 33  3]
    [11 22 33 44]
    [11 22 33  3]
  • 相关阅读:
    PL/SQL中关于时间的操作
    PL/SQL中关于时间的操作
    Master Data Service调用API创建Model
    ASP.NET Postback回调后参数无效
    Silverlight读取Web.config配置文件
    WCF的用户名+密码认证方式
    Trac 经验谈之(5)插件篇
    Cython 0.15,用 OpenMP 并行多核加速 Python!
    BizTalk Accelerator for HL7医疗行业消息路由处理机制
    Silverlight信息加密 通过Rfc2898DeriveBytes类使用基于HMACSHA1的伪随机数生成器实现PBKDF2
  • 原文地址:https://www.cnblogs.com/William-xh/p/9553281.html
Copyright © 2011-2022 走看看