zoukankan      html  css  js  c++  java
  • Numpy 索引及切片

    1.一维数组的索引及切片

    ar = np.arange(20)
    print(ar)
    print(ar[4])
    print(ar[3:6])
    print(ar[:4:2])   #索引到4 按2的步长
    print('-----')

    输出结果:

    [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
    4
    [3 4 5]
    [0 2]
    -----

    2. 二维数组的索引及切片

    ar = np.arange(16).reshape(4,4)
    print(ar, '数组轴数为%i' %ar.ndim)   # 4*4的数组
    print(ar[2],  '数组轴数为%i' %ar[2].ndim)  # 切片为下一维度的一个元素,所以是一维数组
    print(ar[2][1]) # 二次索引,得到一维数组中的一个值
    print(ar[1:3],  '数组轴数为%i' %ar[1:3].ndim)  # 切片为两个一维数组组成的二维数组
    print(ar[2,2])  # 切片数组中的第三行第三列 → 10
    print(ar[:2,1:])  # 切片数组中的1,2行、2,3,4列 → 二维数组
    print('-----')

    输出结果:

    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]
     [12 13 14 15]] 数组轴数为2
    [ 8  9 10 11] 数组轴数为1
    9
    [[ 4  5  6  7]
     [ 8  9 10 11]] 数组轴数为2
    10
    [[1 2 3]
     [5 6 7]]
    -----

    3.三维数组的索引及切片

    ar = np.arange(8).reshape(2,2,2)
    print(ar, '数组轴数为%i' %ar.ndim)   # 2*2*2的数组
    print('
    ')
    print(ar[0],  '数组轴数为%i' %ar[0].ndim)  # 三维数组的下一个维度的第一个元素 → 一个二维数组
    print(ar[0][0],  '数组轴数为%i' %ar[0][0].ndim)  # 三维数组的下一个维度的第一个元素下的第一个元素 → 一个一维数组
    print(ar[0][0][1],  '数组轴数为%i' %ar[0][0][1].ndim)

    输出结果:

    [[[0 1]
      [2 3]]
    
     [[4 5]
      [6 7]]] 数组轴数为3
    
    
    [[0 1]
     [2 3]] 数组轴数为2
    [0 1] 数组轴数为1
    1 数组轴数为0

    4. 布尔型索引及切片

    # 布尔型索引及切片
    
    ar = np.arange(12).reshape(3,4)
    i = np.array([True,False,True])
    j = np.array([True,True,False,False])
    print(ar)
    print(i)
    print(j)
    print(ar[i,:])  # 在第一维度做判断,只保留True,这里第一维度就是行,ar[i,:] = ar[i](简单书写格式)
    print(ar[:,j])  # 在第二维度做判断,这里如果ar[:,i]会有警告,因为i是3个元素,而ar在列上有4个
    # 布尔型索引:以布尔型的矩阵去做筛选
    
    m = ar > 5
    print(m)  # 这里m是一个判断矩阵
    print(ar[m])  # 用m判断矩阵去筛选ar数组中>5的元素 → 重点!后面的pandas判断方式原理就来自此处

    输出结果:

    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
    [ True False  True]
    [ True  True False False]
    [[ 0  1  2  3]
     [ 8  9 10 11]]
    [[0 1]
     [4 5]
     [8 9]]
    [[False False False False]
     [False False  True  True]
     [ True  True  True  True]]
    [ 6  7  8  9 10 11]

    5.数组索引及切片的值更改、复制

    ar = np.arange(10)
    print(ar)
    ar[5] = 100
    ar[7:9] = 200
    print(ar)
    # 一个标量赋值给一个索引/切片时,会自动改变/传播原始数组
    
    ar = np.arange(10)
    b = ar.copy()
    b[7:9] = 200
    print(ar)
    print(b)
    # 复制

    输出结果:

    [0 1 2 3 4 5 6 7 8 9]
    [  0   1   2   3   4 100   6 200 200   9]
    [0 1 2 3 4 5 6 7 8 9]
    [  0   1   2   3   4   5   6 200 200   9]
  • 相关阅读:
    <mvc:default-servlet-handler />说明
    sql server 数据库创建链接服务器访问另外一个sql server 数据库
    WebSocket实现简易聊天室
    WebSocket在建立连接时通过@PathParam获取页面传值
    Shiro密码处理
    Java enum应用小结
    Java8 Optional类使用小结
    Java中使用Jedis操作Redis
    前台图片Canvas压缩上传小结
    剪邮票
  • 原文地址:https://www.cnblogs.com/carlber/p/9905520.html
Copyright © 2011-2022 走看看