• Numpy(二) 元素与数组的操作


    Numpy(二) 元素与数组的操作

    一、元素的索引访问

    1.一维数组索引访问

    ①Numpy一维数组索引访问与python内置序列类型索引访问一样,都使用中括号+下标([index])
    ②正值索引/负值索引
    正值索引:0  1  2  3  4  5
    a数组:  【1,2,3,4,5,6】
    复制索引:0  -5 -4 -3 -2 -1
    
    • 1
    • 2
    • 3
    *正值索引:第一个元素为a[0]其余依次排序,第n个元素为a[n-1] 负值索引:第一个元素依旧为a[0]其余元素从后往前依次减小1,最后一个元素为a[-1],第二个元素为a[-(n-1)]

    2.一维数组索引访问的操作、

    import numpy as np
    a=np.array([1,2,3,4,5,6])
    print('正值索引第五个元素:',a[4])
    print('负值索引倒数第二个元素:',a[-2])
    
    正值索引第五个元素: 5
    负值索引倒数第二个元素: 5
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.二维数组的索引访问

    A.两种语法规则
    ①表达式1:np.array[所在0轴索引] [所在1轴索引] 表达式2:np.array[所在0轴索引,所在1轴索引]
    image-20231011203758572
    *0轴为行,1轴为列
    B.操作
    ①第一种表示方法查询6号元素
    import numpy as np
    a=np.array([[1,2,3],[4,5,6],[7,8,9]])
    print(a)
    print('正值索引为:',a[1][2])
    '6号元素正值索引为[1][2]'
    print('负值索引为:',a[-2][-1])
    '6号元素负值索引为:[-2][-1]'
    
    正值索引为: 6
    负值索引为: 6
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    ②第二种索引方法索引6号元素
    import numpy as np
    a=np.array([[1,2,3],[4,5,6],[7,8,9]])
    print(a)
    print('正值索引:',a[1,2])
    print('负值索引:',a[-2,-1])
    
    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    正值索引: 6
    负值索引: 6
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    二、切片访问

    1.一维数组的切片访问

    ①Numpy一维数组的切片访问与python内置序列切片操作方法一样。切片运算有两种形式:
    1.[start:end]————start是开始索引的位置,end是结束索引前一个元素的位置(不包含end位置上的元素),由开始到结束直接切片下来。
    2.[start:end:step]——start是开始索引的位置,end是结束索引前一个元素的位置(不包含end位置上的元素),step为步长,不尝试切片是获取元素的间隙。步长可以选择正整数也可以选择负整数。
    
    • 1
    • 2
    ②两种方式的切片访问
    A.第一种方式选取第3位至第6位的元素
    import numpy as np
    a=np.array([1,2,3,4,5,6,7,8,9,10])
    print('选取的第3号到第六号元素为:',a[3:6])
    
    选取的第3号到第六号元素为: [4 5 6]————下角标为6号的元素为7,但是不包含end位置的元素故最后一位为a[end-1](6)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    B.第二种方式选取2到8位的元素,步长为2
    import numpy as np
    a=np.array([1,2,3,4,5,6,7,8,9,10])
    print('选取2到8位的元素,步长为2的元素为::',a[2:8:2])
    
    选取2到8位的元素,步长为2的元素为:: [3 5 7]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.二维数组的切片访问

    ①二维数组的切片访问主要是以轴进行切片访问,先0轴后1轴。
    ②语法规则:
    np.array[所在0轴上的切片,所在1轴上的切片]
    
    • 1
    ③实例
    给出5*5的数组
        0  1  2  3  4
     0[ 1  2  3  4  5]
     1[ 6  7  8  9 10]
     2[11 12 13 14 15]
     3[16 17 18 19 20]
     4[21 22 23 24 25]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    A.找出[7,8,9],[12,13,14],[17,18,19],[22,23,24]
    tips:0轴上切片[1:5],1轴上切片[1:4]
    import numpy as np
    a=np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25]])
    print(a[1:5,1:4])
    
    [[ 7  8  9]
     [12 13 14]
     [17 18 19]
     [22 23 24]]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    B.找[13,14]
    tips:0轴上固定值2,1轴上切片[2:4]
    import numpy as np
    a=np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25]])
    print(a[2,2:4])
    print(a)
    [13 14]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    三、布尔索引

    1.为了从数组中过滤我们想要的元素,可以使用布尔索引。

    2.一维数组的布尔索引

    ①创建一个一维数组[1,2,3,4,5,6]
    ②创建一维布尔数组[True,True,Flase,True,Flase,True]
    ③对比,得出数据
    import numpy as np
    a=np.array([1,2,3,4,5,6])
    b=np.array([True,True,False,True,False,True])
    print(a[b])
    
    • 1
    • 2
    • 3
    • 4

    3.二维数组的布尔索引

    ①创建一个二维数组
    ②创建二维布尔数组
    ③对比,得出数据
    import numpy as np
    a=np.array([[1,2,3],[4,5,6],[7,8,9]])
    b=np.array([[True,False,True],[False,False,False],[True,False,False]])
    print(a[b])
    
    [1 3 7]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    *布尔数组必须与索引数组的形状相同!

    四、数组的操作

    1.连接数组

    1.concatenate函数:沿指定轴连接多个数组
    [1,2,3]                    [1,2,3]
    [4,5,6]+[10,11,12]———————— [4,5,6]
    [7,8,9]                    [7,8,9]
                               [10,11,12]
                               
                               
    
    [1,2,3] [10         [1,2,3,10]
    [4,5,6]+ 11———————— [4,5,6,11]
    [7,8,9]  12]        [7,8,9,12]                                  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    向下直接拼接
    import numpy as np
    a=np.array([[1,2,3],[4,5,6],[7,8,9]])
    b=np.array([[10,11,12]])
    ab=np.concatenate((a,b))
    print(ab)
    
    [[ 1  2  3]
     [ 4  5  6]
     [ 7  8  9]
     [10 11 12]]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    向右拼接(将原来一维数组转置后拼接)
    import numpy as np
    a=np.array([[1,2,3],[4,5,6],[7,8,9]])
    b=np.array([[10,11,12]]).T//转置
    ab=np.concatenate((a,b),axis=1)
    print(ab)
    
    [[ 1  2  3 10]
     [ 4  5  6 11]
     [ 7  8  9 12]]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.hstack函数

    hstack函数沿水平堆叠多个数组,相当于concatenate函数在axis=1的情况
    import numpy as np
    a=np.array([[1,2],[3,4]])
    print(a)
    b=np.array([[5,6]]).T
    c=np.concatenate([a,b],axis=1)
    print(c)
    d=np.hstack([a,b])
    print(d)
    
    [[1 2]
     [3 4]]
    [[1 2 5]
     [3 4 6]]
    [[1 2 5]
     [3 4 6]]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3.vstack函数

    vstack函数言垂直堆叠多个数组,相当于concatenate函数在axis=0的情况。
    import numpy as np
    a=np.array([[1,2],[3,4]])
    print(a)
    b=np.array([[5,6]])
    c=np.concatenate([a,b],axis=0)
    print(c)
    d=np.vstack([a,b])
    print(d)
    
    [[1 2]
     [3 4]]
    [[1 2]
     [3 4]
     [5 6]]
    [[1 2]
     [3 4]
     [5 6]]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    2.splik——切割数组

    ①语法:np.splik(ary,indices_or_sections,axis)
    属性标注
    ary指定所属数组
    indices_or_sections对应的数组或者整数,如果整数就用该数平均分割数组,如果数组就按照指定轴做切片处理
    axis轴的分割方向
    ②基本操作
    A.平均等分数组:
    等分一维数组:
    import numpy as np
    a=np.array([1,2,3,4,5,6,7,8,9])
    print(np.split(a,3))
    
    [array([1, 2, 3]), array([4, 5, 6]), array([7, 8, 9])]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    按列等分二维数组

    1.修改axis参数

    import numpy as np
    a=np.array([[1,2,3],[4,5,6],[7,8,9]])
    b=np.split(a,3,axis=1)
    print(b)
    
    [array([[1],
           [4],
           [7]]), array([[2],
           [5],
           [8]]), array([[3],
           [6],
           [9]])]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.使用hsplit()

    import numpy as np
    a=np.array([[1,2,3],[4,5,6],[7,8,9]])
    b=np.hsplit(a,3)
    print(b)
    
    [array([[1],
           [4],
           [7]]), array([[2],
           [5],
           [8]]), array([[3],
           [6],
           [9]])]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    按行等分二维数组

    1.修改axis参数

    import numpy as np
    a=np.array([[1,2,3],[4,5,6],[7,8,9]])
    b=np.split(a,3,axis=0)
    print(b)
    
    [array([[1, 2, 3]]), array([[4, 5, 6]]), array([[7, 8, 9]])]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.使用vsplit()

    import numpy as np
    a=np.array([[1,2,3],[4,5,6],[7,8,9]])
    b=np.vsplit(a,3)
    print(b)
    
    [array([[1, 2, 3]]), array([[4, 5, 6]]), array([[7, 8, 9]])]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    B.用一个数组分割整体数组
    import numpy as np
    a=np.array([1,2,3,4,5,6,7,8,9])
    b=np.split(a,[4,6])
    print(b)
    
    [array([1, 2, 3, 4]), array([5, 6]), array([7, 8, 9])]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    五、数组的算术运算

    1.numpy数组可以使用python里面的加减乘除乘方进行数组内部元素的算术运算。

    2.数组的加法运算

    ①实例
    a=[1,2,3,4] b=[2,3,4,5] a+b=[3,5,7,9]
    
    a=[1,2]        b=[2,3]           a+b=[3,5]
      [3,4]          [4,5]               [7,9]
    
    • 1
    • 2
    • 3
    • 4
    ②代码操作
    一维数组的加法运算
    import numpy as np
    a=np.array([1,2,3,4,5])
    b=np.array([2,4,6,8,10])
    print(a+b)
    
    [ 3  6  9 12 15]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    二维数组的加法运算
    import numpy as np
    a=np.array([[1,2,3],[6,7,8]])
    b=np.random.rand(2,3)
    print('b的数组为:',b)
    print(a+b)
    
    b的数组为: [[0.39952873 0.62792605 0.63734903]
     [0.80093729 0.51350318 0.33915585]]
    [[1.39952873 2.62792605 3.63734903]
    [6.80093729 7.51350318 8.33915585]]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    数组内每个元素加固定值
    import numpy as np
    a=np.array([[1,2,3],[4,5,6],[7,8,9]])
    b=a+10
    print(b)
    
    [[11 12 13]
     [14 15 16]
     [17 18 19]]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.数组里面减法运算(同加法)

    4.数组里面的乘法运算

    ①实例
    a=[1,2,3]    b=[1,3,5]      a*b=[1,6,15] 
      [4,5,6]      [2,4,6]          [8,20,36]
      [7,8,9]      [3,4,5]          [21,32,45]
    
    
    • 1
    • 2
    • 3
    • 4
    ②代码操作
    一维数组的乘法运算
    import numpy as np
    a=np.array([1,2,3,4])
    b=np.array([2,3,4,5])
    print(a*b)
    
    [ 2  6 12 20]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    每个元素同乘一个数
    import numpy as np
    a=np.array([1,2,3,4])
    b=np.array([2,3,4,5])
    print(a*3)
    print(b*5)
    
    [ 3  6  9 12]
    [10 15 20 25]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    二维数组乘法运算
    import numpy as np
    a=np.array([[1,2,3],[4,5,6],[7,8,9]])
    b=np.array([[1,2,3],[2,4,6],[3,6,9]])
    print(a*b)
    
    [[ 1  4  9]
     [ 8 20 36]
     [21 48 81]]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5.数组里面的除法运算(同乘法)

    6.矩阵里面的幂运算

    import numpy as np
    a=np.array([[1,2,3],[4,5,6],[7,8,9]])
    print(a**2)
    
    [[ 1  4  9]
     [16 25 36]
     [49 64 81]]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    *这里面的加、减、乘、除、乘方运算都为在数组里面元素的计算,乘除法不是矩阵相乘。

    六、数组的广播

    1.数组广播的概念:不同形状的数组或者标量计算时发生广播。

    2.标量广播:一个数组与一个标量进行运算,这个标量会构成一个数组与原来数组的形状相同。

    eg;
    
    a=[1,2,3,4]  a+10=[1,2,3,4]+[10,10,10,10]=[11,12,13,14]
    a*10=[1,2,3,4]*[10,10,10,10]=[10,20,30,40]
    
    
    eg:
    a=[1,2]     a+10= [1,2]  +  [10,10]  = [11,12]
      [3,4]           [3,4]     [10,10]    [13,14]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.数组广播

    ①数组广播:当数组在进行计算是,计算的两个数组维度不相等就会进行数组广播。
    ②数组广播的规则

    在这里插入图片描述

    A. 一维数组与高维数组运算,一维数组通过广播的形式将一维数组补齐后进行运算。这里只能是一维数组进行广播
  • 相关阅读:
    (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
    突破编程_C++_设计模式(解释器模式)
    【React】React组件生命周期以及触发顺序(部分与vue做比较)
    移动端人脸风格化技术的应用
    VS Code C# 开发工具包正式发布
    Guitar Pro 8 .1全新功能介绍及2023官方特惠优惠券
    32 数据分析(下)pandas介绍
    运行java命令出现 Error: Invalid or corrupt jarfile XXX.jar
    Java项目:零食超市商城系统(java+SSM+JSP+jQuery+Mysql)
    JVM面试重点-1
  • 原文地址:https://blog.csdn.net/yulong0816/article/details/133843081