如何从8×8的numpy数组中提取创建3×5的小型numpy数组
从8x8 NumPy数组提取3x5子数组的实现方法
NumPy的二维切片是提取子数组最直接的方式,以下是具体操作步骤:
1. 准备基础环境与示例数组
先导入NumPy并创建一个8x8的测试数组(可替换为你自己的数组):
import numpy as np # 创建8x8的示例数组,元素为0到63,按行排列 original_arr = np.arange(64).reshape(8, 8)
2. 用切片提取3x5子数组
NumPy的二维切片语法为 数组[行起始索引:行终止索引, 列起始索引:列终止索引],注意终止索引是左闭右开的——要提取3行,行范围的长度需为3;提取5列,列范围的长度需为5。
比如从第2行(索引1)开始取3行,从第1列(索引0)开始取5列,代码如下:
# 提取行索引1到4(共3行)、列索引0到5(共5列)的子数组 sub_array = original_arr[1:4, 0:5] # 验证子数组形状 print(sub_array.shape) # 输出 (3, 5)
3. 边界注意事项
要确保切片的终止索引不超过原数组的维度:
- 原数组共8行,提取3行时,行起始索引最大为
8 - 3 = 5(5+3=8,刚好不越界) - 原数组共8列,提取5列时,列起始索引最大为
8 - 5 = 3
4. 提取非连续的行/列(可选)
如果需要提取非连续的行或列,可通过索引数组指定位置,比如提取第0、2、4行,第1、3、5、6、7列:
# 指定目标行和列的索引 selected_rows = [0, 2, 4] selected_cols = [1, 3, 5, 6, 7] sub_array_non_continuous = original_arr[selected_rows, selected_cols]
内容的提问来源于stack exchange,提问作者HybridRobotics
相关产品推荐
相关产品推荐

