zoukankan      html  css  js  c++  java
  • NumPy学习(索引和切片,合并,分割,copy与deep copy)

    NumPy学习(索引和切片,合并,分割,copy与deep copy)

    目录

    索引和切片
    
    合并
    
    分割

    copy与deep copy

      

    索引和切片

    通过索引和切片可以访问以及修改数组元素的值

    一维数组

    程序示例

    import numpy as np
    
    #索引与切片
    array=np.arange(3,15)
    print(array)
    print(array[3])#数组下标为3的元素
    print('
    ')
    print(array[1:3])#取从下标1到下标3,不包括下标3
    print(array[1:-9])
    print(array[-11:3])
    print('
    ')
    print(array[:]) #全部元素
    print(array[1:])#从下标为1的元素到最后一个元素
    print(array[:7])#第一个元素到下标为7的元素,不包括下标为7的元素
    print(array[::2])#间隔2
    

      

    运行结果

    [ 3  4  5  6  7  8  9 10 11 12 13 14]
    6
    
    
    [4 5]
    [4 5]
    [4 5]
    
    
    [ 3  4  5  6  7  8  9 10 11 12 13 14]
    [ 4  5  6  7  8  9 10 11 12 13 14]
    [3 4 5 6 7 8 9]
    [ 3  5  7  9 11 13]
    

     

    花式索引

    程序示例

    import numpy as np
    #指定索引位置 index=[1,5,-7] array3=array[index] print(array3) #使用布尔数组来花式索引 mask=np.array([0,1,0,1,1,0,1,0,1,0,0,1],dtype=bool) array4=array[mask] print(array4)

      

    运行结果

    [4 8 8]
    [ 4  6  7  9 11 14]
    

      

    多维 数组

    程序示例

    import numpy as np
    array2=np.arange(3,15).reshape(3,4) print(array2) print(array2[2])#获取数组的某行 print(' ') print(array2[2][2])#获取数组的某个元素,指定行和列 print(array2[2,2]) print(' ') print(array2[2,:])#获取数组的第三行 print(array2[:,2])#获取数组的第三列 print(array2[1:3,1])#获取数组第2和3行的第二列元素 print(array2[1,1:3])#获取数组的第2行的2和3列 print('--------------------------------------------------')
    #输出全部行,一行输出成一个列表 for row in array2: print(row) print(' ')
    #输出全部列,一列输出成一个列表,array2.T为转置 for column in array2.T: print(column) print(' ')
    #将数组展开为一个列表 print(array2.flatten()) print(' ')
    #将数组展开为一个列表,其中array2.flat将数组变为迭代器,上面的flatten()方法则直接返回 for item in array2.flat: print(item)

      

    运行结果

    [[ 3  4  5  6]
     [ 7  8  9 10]
     [11 12 13 14]]
    [11 12 13 14]
    
    
    13
    13
    
    
    [11 12 13 14]
    [ 5  9 13]
    [ 8 12]
    [8 9]
    --------------------------------------------------
    [3 4 5 6]
    [ 7  8  9 10]
    [11 12 13 14]
    
    
    [ 3  7 11]
    [ 4  8 12]
    [ 5  9 13]
    [ 6 10 14]
    
    
    [ 3  4  5  6  7  8  9 10 11 12 13 14]
    
    
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    

      

    花式索引
    程序示例
    import numpy as np

    # 多维数组花式索引,我们需要给定行和列的值
    arr1=np.array([[4,5,7,9],[2,4,6,8],[7,3,1,7]])
    print(arr1)
    print(' ')
    #返回一条次对角线上的3个值
    print(arr1[(0,1,2),(1,2,3)])
    print(' ')
    #返回的最后2行的第1,2,3列
    print(arr1[1:,[0,1,2]])
    #使用mask进行索引
    print(' ')
    mask=np.array([1,0,1,1],dtype=bool)
    arr2=arr1[2,mask]
    print(arr2)

     

    运行结果

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

      

    合并

    一维数组

    程序示例

    import numpy as np
    array1=np.array([1,2,3])
    array2=np.array([4,5,6])
    array3=np.vstack((array1,array2)) #纵向合并
    array4=np.hstack((array1,array2)) #横向合并
    print(array3)
    print(array1.shape)
    print(array2.shape)
    print(array3.shape)
    

    运行结果

    [[1 2 3]
     [4 5 6]]
    (3,)
    (3,)
    (2, 3)
    

      

    import numpy as np


    # #将列表转为numpy的数组
    array1=np.array([1,2,3]).reshape(3,1)
    array2=np.array([4,5,6]).reshape(3,1)
    array3=np.vstack((array1,array2)) #纵向合并
    array4=np.hstack((array1,array2)) #横向合并

    array5=np.concatenate((array1,array2))
    print(array5)
    print(' ')
    #对多个数组进行合并,axis=0为纵向合并,反之为横向合并
    array6=np.concatenate((array1,array2),axis=1)
    print(array6)

      

    [[1]
     [2]
     [3]
     [4]
     [5]
     [6]]
    
    
    [[1 4]
     [2 5]
     [3 6]]
    

      

    分割

    程序示例

    import numpy as np
    
    
    
    arr1=np.arange(12).reshape(3,4)
    print(arr1)
    
    print('横向分割,对列进行分割,分割成2块')
    print(np.split(arr1,2,axis=1))
    print(np.hsplit(arr1,2))
    
    print('纵向分割,对行进行分割,分割成3块')
    print(np.split(arr1,3,axis=0))
    print(np.vsplit(arr1,3))
    
    print('不等量分割,(1为列,0为行)')
    
    print(np.array_split(arr1,3,axis=1))
    

      

    运行结果

    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
    横向分割,对列进行分割,分割成2块
    [array([[0, 1],
           [4, 5],
           [8, 9]]), array([[ 2,  3],
           [ 6,  7],
           [10, 11]])]
    [array([[0, 1],
           [4, 5],
           [8, 9]]), array([[ 2,  3],
           [ 6,  7],
           [10, 11]])]
    纵向分割,对行进行分割,分割成3块
    [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
    [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
    不等量分割,(1为列,0为行)
    [array([[0, 1],
           [4, 5],
           [8, 9]]), array([[ 2],
           [ 6],
           [10]]), array([[ 3],
           [ 7],
           [11]])]
    

    copy与deep copy

    与原数组共享数据的形式

    import numpy as np
    
    
    arr=np.arange(4)
    b=arr
    c=arr
    d=b
    
    print(arr)
    print(b)
    print(c)
    print(d)
    
    print('修改arr[0]的值')
    arr[0]=10
    
    print(b is arr,b)
    print(c is arr,c)
    print(d is arr,d)
    

      

    运行结果

    [0 1 2 3]
    [0 1 2 3]
    [0 1 2 3]
    [0 1 2 3]
    修改arr[0]的值
    True [10  1  2  3]
    True [10  1  2  3]
    True [10  1  2  3]
    

      

    不与原数据共享数据的形式

    import numpy as np
    
    
    arr=np.arange(4)
    b=arr.copy()
    print(arr)
    print(b)
    
    
    print('修改arr[0]的值')
    arr[0]=10
    print(arr)
    print(b is arr,b)
    

      

    运行结果

    [0 1 2 3]
    [0 1 2 3]
    修改arr[0]的值
    False [0 1 2 3]
    

      

    总结:

    如果你想把它们关联起来,就使用第一种方法

    如果只是把一个数组的值给另一个数组,使用第二种方法

  • 相关阅读:
    Excel设置下拉选项的方法
    Codeforces Round #218 (Div. 2) (线段树区间处理)
    手动配置S2SH三大框架报错(一)
    一种H.264高清视频的无参考视频质量评价算法(基于QP和跳过宏块数)
    UIWebView的使用
    AFNetworkIng的简单使用
    虚线边框的实现
    iOS实现简单时钟效果
    hdu 3966 Aragorn's Story
    Count on a tree
  • 原文地址:https://www.cnblogs.com/-wenli/p/10263324.html
Copyright © 2011-2022 走看看