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

发布于:2025-03-05 ⋅ 阅读:(14) ⋅ 点赞:(0)

📌 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 索引 & 切片 可实现高效数据操作 🚀


网站公告

今日签到

点亮在社区的每一天
去签到