大数据知识体系
首页
数据结构与算法
  • JVM
  • Java
  • Scala
  • Python
设计模式
  • MySQL
  • Redis
  • HDFS
  • HBase
  • ClickHouse
  • ElasticSearch
  • Iceberg
  • Hudi
  • Spark
  • Flink
  • Hive
  • Yarn
  • Zookeeper
  • Maven
  • Git
  • 数据仓库
  • 用户画像
  • 指标体系
数据治理
关于
首页
数据结构与算法
  • JVM
  • Java
  • Scala
  • Python
设计模式
  • MySQL
  • Redis
  • HDFS
  • HBase
  • ClickHouse
  • ElasticSearch
  • Iceberg
  • Hudi
  • Spark
  • Flink
  • Hive
  • Yarn
  • Zookeeper
  • Maven
  • Git
  • 数据仓库
  • 用户画像
  • 指标体系
数据治理
关于
  • JVM

    • JVM 架构
    • JVM 类加载机制
    • JVM 运行时数据区
    • JVM 垃圾回收机制
    • JVM 性能监控与调优
    • JVM 常见错误
  • Java

    • Java基础

      • Java 基础知识
      • Java 基础 - 枚举类
      • Java 基础 - 异常处理
      • Java 基础 - 泛型
      • Java 基础 - 反射
      • Java 基础 - 代理模式
      • Java 基础 - 注解
    • Java集合

    • Java并发编程

    • Java 开发规范
  • Scala

    • Scala 概述
  • Python

    • Numpy

      • 初识 Numpy
      • ndarray 的创建方式
      • NumPy 的数据类型
      • NumPy 数组计算
      • 拷贝
      • 索引和切片
        • 切片
        • 索引
          • 布尔索引
          • 花式索引
      • 数学和统计方法
      • 数组形状变换
      • 通用函数
      • 排序
      • 搜索和计数
      • 线性代数
      • 伪随机数生成
      • 广播
      • 文件输入和输出
    • Pandas

      • 初识 Pandas
      • 认识 Series 和 DataFrame
      • Series 和 DataFrame 增删改查
      • Index对象增删改查
      • 普通列和行Index相互转化
      • 快速查看整体信息
      • 数值运算
      • 合并数据集
      • 数值统计与聚合
      • 分组聚合
      • 分类类型
      • 排序和排名
      • 时间序列
      • 文件输入与输出
      • 缺失值处理
      • 字符串处理
      • pandas sql
      • 其它
  • 语言基础
  • Python
  • Numpy
Will
2022-08-04
目录

索引和切片

  • 数组切片是原始数组的视图,不是复制品,如果要得到切片的副本,应该使用 copy()方法
  • 在多维数组中索引,如果省略了后面的索引,则返回对象会是一个维度低一点的 ndarray(它含有高一级维度上的所有数据)

# 切片

切片的基本语法 ndarray[i : j : k],其中 i 为起始下标,j 为结束下标(不包括 j),k 为步长(默认为 1)

import numpy as np

arr = np.arange(10)
arr
1
2
3
4
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr[1:9:2]
1
array([1, 3, 5, 7])
arr[4:-3]
1
array([4, 5, 6])
arr[9:4:-2]
1
array([9, 7, 5])
a = arr[::2]
a
1
2
array([0, 2, 4, 6, 8])
arr[:6] = 0
1
arr[6:]
1
array([6, 7, 8, 9])
arr[:] = 1
arr
1
2
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])

多维切片

ndarr = np.arange(16).reshape((4, 4))
ndarr
1
2
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
ndarr[:2] # 行,等效于arr2[:2, :]
1
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])
ndarr[:2, :2] # 前两行的前两列
1
array([[0, 1],
       [4, 5]])
ndarr[::2, -2] # 步长为2的行的倒数第二列
1
array([ 2, 10])

# 索引

arr = np.arange(10)
ndarr = np.arange(16).reshape((4, 4))
arr
ndarr
1
2
3
4
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
arr[1]
1
1
ndarr[1,1]
1
5
ndarr[1, 1] # 等效于ndarr[1][1],但是后者速度更慢
1
5
ndarr[2, [1, 2]] # 第2行的第1、2列元素
1
array([ 9, 10])
ndarr[:3, [0,1]] # 前3行的第0、1列元素
1
array([[0, 1],
       [4, 5],
       [8, 9]])

# 布尔索引

cities = np.array(['bj', 'cd', 'sh', 'gz', 'cd'])
cities
1
2
array(['bj', 'cd', 'sh', 'gz', 'cd'], dtype='<U2')
data = np.arange(20).reshape(5, 4)
data
1
2
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19]])
cities == 'cd'
1
array([False,  True, False, False,  True])
data[cities == 'cd']
1
array([[ 4,  5,  6,  7],
       [16, 17, 18, 19]])
data[cities == 'cd', :1]
1
array([[ 4],
       [16]])
# data[:, cities=='cd'] # 注意:如果布尔型数组的长度不对,布尔型选择就会出错
1

还可以这样?

cities != 'cd'
1
array([ True, False,  True,  True, False])
data[cities != 'cd']  # 等效于 data[~(cities == 'cd')]
1
array([[ 0,  1,  2,  3],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
data[cities != 'cd', :1] # 等效于 data[~(cities == 'cd'), :1]
1
array([[ 0],
       [ 8],
       [12]])

# 花式索引

花式指的是利用整数数组进行索引

arr3 = np.arange(36).reshape(6,6)
arr3
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],
       [24, 25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34, 35]])
# 取出第3,2, 5行
arr3[[3, 4, 5]]
1
2
array([[18, 19, 20, 21, 22, 23],
       [24, 25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34, 35]])
# 使用负数索引将会从末尾开始选取行
arr3[[-4, -2 , -1]]
1
2
array([[12, 13, 14, 15, 16, 17],
       [24, 25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34, 35]])
arr3[[1, 2, 3], [1, 2, 3]] # 取出下标为(1, 1), (2, 2), (3, 3)的元素
1
array([ 7, 14, 21])
arr3[[1, 2, 3]][:, [1, 2, 3]]  # 同时在行和列上进行花式索引
1
array([[ 7,  8,  9],
       [13, 14, 15],
       [19, 20, 21]])
上次更新: 2023/11/01, 03:11:44

← 拷贝 数学和统计方法→

Theme by Vdoing | Copyright © 2022-2023 Will 蜀ICP备2022002285号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式