Python 数组高级索引

这篇博客详细介绍了在Python中使用NumPy库对二维数组进行各种索引和操作的方法,包括单个元素、多个元素、整行、整列、行/列范围、奇数/偶数行/列的选择,以及交点矩阵和布尔索引的操作。同时,展示了如何通过索引获取特定行和列,以及如何使用布尔条件筛选数组元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对一个二维数组进行索引
新建一个矩阵

import numpy as np

a = np.arange(16).reshape((4,4))
print(a)

请添加图片描述

单个元素索引

print(a[1,2])

多个元素索引

(0,0)、(1,1)、(2,0)

print(a[[0, 1, 2], [0, 1, 0]])
print(a[ [[0, 0], [3, 3]], [[0, 2], [0, 2]] ])

在这里插入图片描述

索引一整行

print(a[1,:])

索引一整列

print(a[:,1])

索引一个范围内的行/列

print(a[1:2,:])
print(a[:,1:2])

奇数/偶数行/列

print(a[1::2,:])
print(a[:,::2])

在这里插入图片描述

指定的行或者列

print(a[[0,2,3]])
print(a[:,[0,2,3]])

在这里插入图片描述

交点矩阵

注意两种区别 一种是索引4个元素,通过坐标的形式 另一种是给出行和列,索引出交点形成的矩阵

print(a[[0, 2, 3, 1], [0, 3, 1, 2]])
print(a[np.ix_([0, 2, 3, 1], [0, 3, 1, 2])])

在这里插入图片描述

布尔索引

pyprint(a[a > 10])
a = np.array([np.nan,  1,2,np.nan,3,4,5])  
print (a[~np.isnan(a)])
### 使用 NumPy 和 Pandas 进行行索引 对于 Python 数组中的行索引操作,NumPy 提供了多种方式来访问和处理数据。当涉及到多维数组时,可以利用切片技术获取特定的行。 #### 利用 NumPy 的基本索引来选取单个或多个连续行 考虑一个简单的例子: ```python import numpy as np my_array = np.array([[1, 2], [3, 4], [5, 6]]) row_indexed_data = my_array[0] # Selects the first row. print(row_indexed_data) # Output will be [1 2][^1] multi_row_selection = my_array[:2] # Selects the first two rows. print(multi_row_selection) # Output will be [[1 2] [3 4]] ``` 上述代码展示了如何使用整数索引选择单独的一行以及通过指定范围来提取一系列相邻的行。 #### 高级索引:布尔掩码与花式索引 除了基础的方法外,还可以采用更复杂的手段来进行非连续或多条件下的行筛选。这通常涉及创建一个布尔型数组作为过滤器或是提供一组用于定位目标位置的整数值列表。 ##### 布尔掩码示例 ```python mask = (my_array[:, 0] >= 3) & (my_array[:, 1] <= 5) filtered_rows = my_array[mask] print(filtered_rows) # Only prints those meeting criteria. ``` 这里定义了一个逻辑表达式的组合用来匹配符合条件的数据项并返回相应的子集。 ##### 花式索引实例 ```python fancy_indices = [0, 2] selected_rows_via_fancy = my_array[fancy_indices] print(selected_rows_via_fancy) # Outputs specific indexed rows directly. ``` 此方法允许直接给出想要取得的具体行号从而快速获得所需的结果集合。 #### 在 Pandas 中实现类似的行索引功能 Pandas 库同样支持灵活而强大的行检索机制,特别是借助 `.loc` 或者 `.iloc` 属性能够更加直观地完成基于标签名或者是纯位移偏移量的选择任务。 ```python import pandas as pd df_example = pd.DataFrame({ 'A': ['foo', 'bar'], 'B': [1, 2], }) single_row_by_label = df_example.loc['index_name'] # If index names are set. multiple_rows_with_conditions = df_example[df_example['A']=='foo'] specific_positional_access = df_example.iloc[[0]] # Access by integer position. print(single_row_by_label) print(multiple_rows_with_conditions) print(specific_positional_access)[^3] ``` 以上介绍了几种不同的行索引技巧,在实际应用过程中可以根据具体需求选用最合适的方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值