numpy list 切片操作

本文详细介绍了如何使用Python的NumPy库进行数组的切片操作,展示了选取特定行、列的方法,并深入探讨了如何通过添加新维度来改变数组形状。通过对不同维度的数组操作,读者可以更灵活地处理数据。

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

import numpy as np
a = np.arange(1,26).reshape((5,5))

[[ 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]]
# 行列下标从0 开始,切不包括后一个数。输出1、2 行的2到4 列
a[1:3, 2:5]
array([[ 8,  9, 10],
       [13, 14, 15]])
# 输出所有的行
a[:, 2:5]
array([[ 3,  4,  5],
       [ 8,  9, 10],
       [13, 14, 15],
       [18, 19, 20],
       [23, 24, 25]])
a[:, None]
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]]])
a[:, None].shape # None表示 增加一维
(5, 1, 5)
a[:,:, None].shape  # 在第三维增加一维
(5, 5, 1)
a[:,:, None, None].shape   # 在第三、四维增加一维
(5, 5, 1, 1)
a[..., None].shape  # 在现有维度基础上的最后增加一维。就是因为…代替了前面两个冒号
(5, 5, 1)
### NumPy 数组类型的切片操作 NumPy 提供了强大的多维数组对象以及用于处理这些数组的工具。对于 NumPy 数组的类型切片,可以通过索引和布尔掩码等方式实现复杂的数据提取。 #### 基本概念 NumPy切片功能类似于 Python 列表的切片语法,但它支持更高维度的操作。通过指定范围 `[start:stop:step]` 可以获取子集数据[^1]。 #### 类型切片示例 以下是几种常见的 NumPy 数组类型切片方法: 1. **基本切片** 使用简单的整数索引来访问特定部分。 ```python import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) sliced_arr = arr[:2, :2] # 获取前两行和前两列 print(sliced_arr) ``` 2. **高级索引** 高级索引允许更灵活的选择方式,比如通过布尔条件筛选。 ```python condition = arr > 5 filtered_arr = arr[condition] print(filtered_arr) # 输出满足条件的所有元素 ``` 3. **组合切片与布尔掩码** 结合切片和布尔逻辑可以进一步细化选择。 ```python combined_slice = arr[arr[:, 1] % 2 == 0][:, ::-1] print(combined_slice) # 对第二列偶数值所在的行反转其顺序 ``` 4. **拼接多个数组** 如果需要将不同数组按某种规则连接起来,则可使用 `concatenate` 或其他函数。 ```python arr1 = np.eye(5) arr2 = np.eye(5) concatenated_array = np.concatenate((arr1, arr2)) print(concatenated_array.shape) # (10, 5),验证形状变化 ``` 上述例子展示了如何利用多种技术完成不同类型的数据分割任务[^2]。 #### 查找模式位置 如果目标是从二维 NumPy 数组中定位某个具体图案的位置,也可以借助列表转换来辅助计算。 ```python pattern = [[0, 1]] A = np.array([[0, 1], [1, 0]]) indices = A.tolist().index(pattern[0]) print(indices) # 找到匹配的第一个索引号 ``` 注意此法仅适用于简单情况;针对更加复杂的查询需求可能需采用专门算法或库扩展[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值