NumPy基础之花式索引

1 NumPy基础之花式索引

NumPy的花式索引(Fancy indexing)指ndarray数组使用整数数组进行索引。这的整数数组可以是python的列表等可迭代对象,也可以是NumPy数组。

花式索引,用整数数组的元素作为对应轴的索引,并且按数组元素顺序选取子集。

1.1 一个花式索引

一个花式索引,则整数数组元素为0轴的索引。

>>> import numpy as np
>>> ar1=np.empty((8,5))
>>> for i in range(8):ar1[i]=i+1
>>> ar1
array([[1., 1., 1., 1., 1.],
       [2., 2., 2., 2., 2.],
       [3., 3., 3., 3., 3.],
       [4., 4., 4., 4., 4.],
       [5., 5., 5., 5., 5.],
       [6., 6., 6., 6., 6.],
       [7., 7., 7., 7., 7.],
       [8., 8., 8., 8., 8.]])
# 花式索引,使用整数数组作为轴的索引,并且按元素先后顺序返回对应轴数据
# 使用列表作为花式索引
# 返回0轴索引为5,2,0,3的元素,并且按元素先后顺序返回
>>> ar1[[5,2,0,3]]
array([[6., 6., 6., 6., 6.],
       [3., 3., 3., 3., 3.],
       [1., 1., 1., 1., 1.],
       [4., 4., 4., 4., 4.]])
# 负数作为索引,从最后一个开始向前索引为-1,-2,-3,依次类推
>>> ar1[[-3,-6,-1]]
array([[6., 6., 6., 6., 6.],
       [3., 3., 3., 3., 3.],
       [8., 8., 8., 8., 8.]])
# 使用array作为花式索引
>>> ar1[np.array((2,5,0))]
array([[3., 3., 3., 3., 3.],
       [6., 6., 6., 6., 6.],
       [1., 1., 1., 1., 1.]])

1.2 多个花式索引

多个花式索引,每个花式索引依次对应0轴、1轴…的索引,最终取0轴和1轴的交集部分。

>>> import numpy as np
# ndarray.reshape()将ndarray转换为特定形状的ndarray
>>> ar2=np.arange(1,41).reshape((8,5))
>>> ar2
array([[ 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],
       [36, 37, 38, 39, 40]])
# 多个花式索引,每个花式索引依次对应0轴、1轴...的索引
# [1,5,6,3]为0轴索引,[2,1,0,3]为1轴索引
# 最终取0轴和1轴的交集部分
>>> ar2[[1,5,6,3],[2,1,0,3]]
array([ 8, 27, 31, 19])
### NumPy 花式索引与高级用法教程 #### 什么是花式索引花式索引(Fancy Indexing)是一种利用整数数组来访问多维数组中的特定元素的方式。它允许开发者通过传递一个或多个一维整数数组作为索引来提取任意位置上的元素[^3]。 #### 如何使用花式索引? 假设有一个二维数组 `arr`: ```python import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print("Original array:") print(arr) ``` 可以通过提供两个列表分别指定行和列的位置来进行花式索引: ```python row_indices = [0, 2] col_indices = [1, 2] selected_elements = arr[row_indices, col_indices] print("Selected elements using fancy indexing:", selected_elements) ``` 上述代码选择了 `(0, 1)` 和 `(2, 2)` 这两个位置的元素,即 `[2, 9]`[^4]。 #### 组合切片与花式索引 除了单独使用外,还可以将花式索引与其他类型的索引结合起来使用。例如,可以先对某些维度进行常规切片再应用花式索引于另一些维度上: ```python combined_selection = arr[:2, [1, 2]] print("Combined slicing and fancy indexing result:\n", combined_selection) ``` 这里首先取前两行 (`:` 表示全部),然后对于每一行只保留第 二 列 及 第三列 的值。 #### 布尔索引深入解析 布尔索引则是另一种形式的高级索引技术,其中传入的是由 True/False 构成的一维数组或者表达式的逻辑运算结果。这种技术非常适合用于基于条件过滤数据集的情况[^5]。 下面展示了一个简单的例子,演示如何从向量中选出大于某个阈值的所有项: ```python vector = np.arange(10) filtered_vector = vector[vector > 5] print("Elements greater than five:", filtered_vector) ``` 此段程序打印出了原向量里所有超过五的部分——也就是 `[6 7 8 9]`。 另外值得注意的是当涉及到多重条件时可采用按位操作符(`&`, `|`)连接各个判断标准并确保它们被圆括号包围以免引起优先级错误: ```python complex_filter = vector[(vector > 5) & (vector < 8)] print("Complex filter results between six to seven inclusive:", complex_filter) ``` 这段脚本最终输出满足既定范围内的成员集合 `{6, 7}`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值