zoukankan      html  css  js  c++  java
  • Numpy02之ndarray的查询

    一维数组的索引和切片

    a = np.array([1,2,3,4,5,6,7])
    a[3]  # 单值
    a[[1, 3, 4]]  # 获取不连续多值
    a[2:5]  # 切片查询,连续多值
    a[-3]  # 倒查
    

    多维数组索引和切片查询

    1. 索引查询
    2. ndarray查询
    3. 切片查询
    总结
    1.同一级别写在同一个括号内,每一个占位符都比上一个少一个维度,占位符少于维度的情况下默认此维度的全部数据
    
    2.2个[]相连可能会触发花式索引、
    a[[1, 0], [2, 0, 1], [3, 1, 0, 2]]  # 错误做法
    a[:, [0, 1], [1, 2]]  # 错误,触发了花式索引语法
    
    3.[[],[],[]] 0维索引,1维索引,2维索引 (从外向里数)
    

      

    a = np.arange(24).reshape(2,3,4)
    # 类list列表查询方式
    
    a[0]
    a[0][1]
    a[0][1][2]
    
    # ndarray查询
    
    a[0]
    a[0, 1]
    a[0, 1, 2]
    
    # 查询多值
    a[0, 2, [1, 3]]
    
    # 倒查
    a[-2, -1, -2]
    
    a[:]  # 简写
    a[:, :, :]  # 每个维度都选中所有值
    a[:, :, ::2]  # 步长
    

    花式索引

    查询复杂情况:不同行/不同列,还要一次查询出来的结果

    查询 [5,15]  各个维度索引都对不上
    
    a[0, 1, 1]  # 5
    a[1, 0, 3]  # 15
    
    a[
        [0, 1],
        [1, 0],
        [1, 3],
    ]
    
    a[[0, 1], [1, 0], [1, 3]]  # [0维索引,1维,2维度],从外到里数
    

    调整数组的顺序

    调节各个维度的索引顺序就是一种变相查询  

    array([[[ 0,  1,  2,  3],
            [ 4,  5,  6,  7],
            [ 8,  9, 10, 11]],
    
           [[12, 13, 14, 15],
            [16, 17, 18, 19],
            [20, 21, 22, 23]]])
    
    # 0维顺序调节
    a[[1, 0]]
    
    # 1维
    a[:, [2, 0, 1]]
    
    # 2维
    a[:, :, [1, 3, 2, 0]]
    
    # 多个维度同时调整顺序
    # a[[1, 0], [2, 0, 1], [3, 1, 0, 2]]  # 错误做法
    a[[1, 0]][:, [1, 0, 2]][:, :, [3, 1, 0, 2]]
    

    布尔型索引

    案例:有两个数组

    • 一个一维数组,7个值,存储姓名,有重复
    • 一个7行4列数组,存储数据,每行对应一个姓名
    • 要求选出名字 张三 对应的所有数据行
    names = np.array(['张三','李四','王五','张三','王五','李四','李四'])
    data = np.arange(28).reshape(7, 4)
    
    
    索引查询
    names[[0, 3]]
    
    布尔查询
    names[[True, False, False, True, False, False, False]]
    
    # 查询data里 张三对应的两行
    data[names == '张三']
    
    data[names == '张三', :2]  # 0维,1维
    

      

    逻辑运算

    | & ~
    
    或且非
    data[(names == '张三') | (names == '王五')]
    
    查询所有不是张三的人
    1.names[names != '张三']
    2.names[~(names == '张三')]  # 非运算
    

      

    返回指定条件元素所在位置索引

    • 之前的查询都是知道索引,查询值
    • 现在的查询是知道值,查询索引
    a = np.array([[1,2,3,4],[5,4,7,8]])
    
    根据条件查询值
    a[a > 2]
    
    查询所有符合条件的索引:np.where()
    np.where(a > 2)  # 竖着看
    result:
    (array([0, 0, 1, 1, 1, 1], dtype=int64),
     array([2, 3, 0, 1, 2, 3], dtype=int64))
    # 0维索引
    # 1维索引
    
    b = np.array([[[1,2,3,4],[5,4,7,8]],[[1,4,3,2],[5,2,1,8]]])
    b[b == 4] # [0,0,3], [0,1,1], [1,0,1] 
    np.where(b == 4)
    result:
    (array([0, 0, 1], dtype=int64),
     array([0, 1, 0], dtype=int64),
     array([3, 1, 1], dtype=int64))
    

    np.where 高级操作

    基础操作,只有一个参数,高级操作有3个参数

      

    例子:生成一个由-1和1构成的一维随机数数组

    1:生成由-1和0组成的数组

    a = np.random.randint(-1, 1, 100)
    
    # 使用numpy的np.where替换实现
    # 如运算简单可以用方法2替代
    np.where(a == 0, 1, -1)  # 条件为真,返回第一个参数,为假返回第二个参数
    
    向量化运算,直接查询后赋值
    b = a.copy()
    b[b == 0] = 1
    

      

      

      

      

    本文为原创文章,转载请标明出处
  • 相关阅读:
    linux 下安装 mysql (centos7)版本
    linux 安装php7 -系统centos7
    Beta阶段事后分析
    Beta阶段展示博客
    Beta阶段测试报告
    Beta阶段发布说明
    第二十次ScrumMeeting博客
    第十九次ScrumMeeting博客
    第十八次ScrumMeeting博客
    第十七次ScrumMeeting博客
  • 原文地址:https://www.cnblogs.com/harden13/p/14136498.html
Copyright © 2011-2022 走看看