• 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
    

      

      

      

      

    本文为原创文章,转载请标明出处
  • 相关阅读:
    【leetcode】Binary Search Tree Iterator
    【leetcode】Palindrome Partitioning II
    【leetcode】Best Time to Buy and Sell Stock III
    【leetcode】Best Time to Buy and Sell Stock II
    【leetcode】Longest Consecutive Sequence
    【leetcode】Factorial Trailing Zeroes
    【leetcode】Simplify Path
    【leetcode】Generate Parentheses
    【leetcode】Combination Sum II
    【leetcode】Combination Sum
  • 原文地址:https://www.cnblogs.com/harden13/p/14136498.html
Copyright © 2020-2023  润新知