当前位置: 首页 > news >正文

【数据挖掘】NumPy的索引与切片(Indexing Slicing)

📌 NumPy ndarray 的索引与切片(Indexing & Slicing)

NumPy 提供 灵活高效 的索引与切片方式,支持 一维、二维、多维数组 的访问与操作。


1️⃣ 索引(Indexing)

索引用于访问 NumPy 数组中的 单个元素

一维数组索引

import numpy as np

arr = np.array([10, 20, 30, 40, 50])

print(arr[0])   # 访问第 1 个元素 -> 10
print(arr[-1])  # 访问最后 1 个元素 -> 50
print(arr[2])   # 访问索引 2 的元素 -> 30

二维数组索引

arr2d = np.array([[1, 2, 3], 
                  [4, 5, 6], 
                  [7, 8, 9]])

print(arr2d[0, 1])  # 访问第 1 行第 2 列 -> 2
print(arr2d[2, -1]) # 访问最后 1 行最后 1 列 -> 9
  • arr2d[0, 1]:表示第 0 行、1 列
  • arr2d[2, -1]:表示 最后 1 行、最后 1 列(负索引)。

2️⃣ 切片(Slicing)

切片用于提取 数组的子集,语法如下:

array[start:stop:step]
  • start:起始索引(包含)。
  • stop:结束索引(不包含)。
  • step:步长(默认为 1)。

一维数组切片

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

print(arr[2:7])    # 取索引 2 到 6 -> [2 3 4 5 6]
print(arr[:5])     # 取前 5 个元素 -> [0 1 2 3 4]
print(arr[3:])     # 从索引 3 开始到结尾 -> [3 4 5 6 7 8 9]
print(arr[::2])    # 每隔 2 取一个 -> [0 2 4 6 8]
print(arr[::-1])   # 逆序数组 -> [9 8 7 6 5 4 3 2 1 0]

二维数组切片

arr2d = np.array([[1, 2, 3, 4], 
                  [5, 6, 7, 8], 
                  [9, 10, 11, 12]])

print(arr2d[:2, 1:3])  # 取前 2 行,第 2~3 列 -> [[2 3]
                        #                        [6 7]]

print(arr2d[1:, ::2])  # 从第 2 行开始,每隔 2 列取值 -> [[5 7]
                        #                                [9 11]]

print(arr2d[::-1, ::-1])  # 行和列都逆序 -> [[12 11 10 9]
                           #                 [8 7 6 5]
                           #                 [4 3 2 1]]

3️⃣ 高级索引(Boolean & Fancy Indexing)

NumPy 支持 布尔索引花式索引,可实现更复杂的数据提取。

(1) 布尔索引

arr = np.array([10, 20, 30, 40, 50])

mask = arr > 25   # 返回布尔数组:[False False  True  True  True]
print(arr[mask])  # 取出大于 25 的元素 -> [30 40 50]

# 直接写
print(arr[arr % 20 == 0])  # 取能被 20 整除的数 -> [20 40]

(2) 花式索引(Fancy Indexing)

arr = np.array([10, 20, 30, 40, 50])

idx = [0, 3, 4]  # 选索引 0, 3, 4
print(arr[idx])  # -> [10 40 50]
arr2d = np.array([[1, 2, 3], 
                  [4, 5, 6], 
                  [7, 8, 9]])

rows = [0, 1, 2]  # 选 3 行
cols = [2, 1, 0]  # 选 3 列
print(arr2d[rows, cols])  # -> [3 5 7]

📝 总结

操作语法示例说明
索引arr[2]访问索引 2 位置的元素
二维索引arr2d[1, 2]访问第 2 行第 3 列
切片arr[1:4]取索引 1 到 3(不含 4)
步长arr[::2]每隔 2 取 1 个
逆序arr[::-1]逆序数组
布尔索引arr[arr > 20]取大于 20 的元素
花式索引arr[[1, 3, 4]]取索引 1, 3, 4

NumPy 索引 & 切片 可实现高效数据操作 🚀

相关文章:

  • 开源嵌入式实时操作系统NuttX介绍
  • 分布式环境下如何防止重复提交?AOP+Redis设计高可用的防重提交组件
  • 【基础3】快速排序
  • 嵌入式科普(34)通过对比看透DMA的本质
  • 第四十一:Axios 模型的 get ,post请求
  • C++----异常
  • Python数据可视化
  • PX4中的uavcan进程
  • python全栈-Linux基础
  • 策略模式处理
  • AI工具:deepseek+阶跃视频,生成好玩的视频
  • 教育强国建设“三年行动计划“分析
  • 如何快速上手RabbitMQ 笔记250304
  • docker-compose安装anythingLLM
  • 2000-2020年各省地方财政一般预算支出数据
  • 鸿蒙5.0实战案例:基于ArkUI的透明页面效果
  • c++中什么时候应该使用extern关键字?
  • 全栈(Java+vue)实习面试题(含答案)
  • Django项目实战
  • 基于opencv消除图片马赛克
  • 莒县做网站和微信/广州关于进一步优化疫情防控措施
  • 中国招标建设信息网站/百度收录提交入口网址
  • 杭州外贸公司有哪些/北京推广优化经理
  • 阿里云网站备案拍照点/流量查询网站
  • 山河建设集团有限公司的网站/推广app的软文案例
  • 多少钱网站设计/营销策划案的模板