21.2 数组索引、切片与形状操作
Python数组索引、切片与形状操作教程 | 新手入门指南
本教程详细介绍Python中数组索引、切片和形状操作的基础知识,使用NumPy示例,适合新手学习,帮助快速掌握数组处理技巧。
推荐工具
Python数组索引、切片与形状操作教程
简介
在Python中,数组是一种重要的数据结构,尤其在数据科学和机器学习中,NumPy库提供了高效的数组操作。学习数组索引、切片和形状操作是掌握Python数据处理的基础。本教程适合新手,通过简单示例帮助您快速上手。
数组索引
索引用于访问数组中的单个元素。Python数组索引从0开始,即第一个元素的索引为0。
正向索引
正向索引从数组开头开始计数。例如,在数组arr = [10, 20, 30, 40, 50]中:
arr[0]访问第一个元素:10arr[2]访问第三个元素:30
负向索引
负向索引从数组末尾开始计数,-1表示最后一个元素。例如:
arr[-1]访问最后一个元素:50arr[-3]访问倒数第三个元素:30
切片操作
切片允许访问数组的一个子集,语法为 arr[start:stop:step],其中:
start:起始索引(包含),默认为0stop:结束索引(不包含),默认为数组长度step:步长,默认为1
示例
使用Python列表(类似数组)演示:
arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 切片基本示例
print(arr[2:5]) # 输出: [2, 3, 4](从索引2到5-1)
print(arr[:4]) # 输出: [0, 1, 2, 3](从开头到索引4-1)
print(arr[6:]) # 输出: [6, 7, 8, 9](从索引6到结尾)
# 使用步长
print(arr[::2]) # 输出: [0, 2, 4, 6, 8](每两步取一个元素)
print(arr[1::3]) # 输出: [1, 4, 7](从索引1开始,每三步)
切片也适用于NumPy数组,操作类似。
形状操作
在NumPy中,数组形状(shape)是指数组的维度大小。形状操作是调整数组维度的关键,常用于数据处理。
形状概念
使用NumPy数组作为示例:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]]) # 2x3二维数组
print(arr.shape) # 输出: (2, 3) 表示2行3列
重塑数组
重塑(reshape)改变数组的形状而不改变数据。使用reshape()方法。
arr = np.array([1, 2, 3, 4, 5, 6])
reshaped_arr = arr.reshape(2, 3) # 重塑为2x3数组
print(reshaped_arr)
# 输出:
# [[1 2 3]
# [4 5 6]]
重塑时,新形状的总元素数必须与原数组相同(例如,这里6个元素)。
展平数组
展平(flatten)将多维数组转换为一维数组。
flatten():返回一个新数组的展平副本。ravel():返回数组的展平视图(可能修改原数组)。
arr = np.array([[1, 2, 3], [4, 5, 6]])
flat_arr = arr.flatten() # 或 arr.ravel()
print(flat_arr) # 输出: [1 2 3 4 5 6]
综合示例
结合索引、切片和形状操作,处理NumPy数组。
import numpy as np
# 创建一个3x3数组
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 索引访问
print(arr[1, 2]) # 输出: 6(第二行第三列)
# 切片获取子数组
print(arr[:2, 1:]) # 输出前两行、后两列
# 输出:
# [[2 3]
# [5 6]]
# 重塑数组
reshaped = arr.reshape(1, 9) # 重塑为1x9数组
print(reshaped) # 输出: [[1 2 3 4 5 6 7 8 9]]
# 展平数组
flat = arr.flatten()
print(flat) # 输出: [1 2 3 4 5 6 7 8 9]
总结
- 数组索引:使用索引访问单个元素,从0开始,支持负向索引。
- 切片操作:使用
start:stop:step语法访问子数组,灵活高效。 - 形状操作:在NumPy中,形状操作如重塑和展平,帮助调整数组维度,适应数据处理需求。
掌握这些基础操作后,您能更好地处理数组数据,为进一步学习数据分析或机器学习打下基础。实践是学习的关键,建议多尝试代码示例以加深理解。
开发工具推荐