在 Python 中,创建数组和切片操作可以通过多种方式实现,具体取决于你使用的数据结构(如原生列表 list
或 NumPy 的 ndarray
)。以下是详细的步骤和示例:
一、创建数组
1. 使用原生列表(List)
Python 的原生列表是最基本的数组结构,支持嵌套创建多维数组:
# 一维数组
arr_1d = [0, 1, 2, 3, 4]
# 二维数组
arr_2d = [
[1, 2, 3],
[4, 5, 6]
]
# 三维数组
arr_3d = [
[[1, 2], [3, 4]],
[[5, 6], [7, 8]]
]
2. 使用 NumPy 库
NumPy 提供了高效的 ndarray
对象,适合科学计算。首先需要安装并导入 NumPy:
pip install numpy
import numpy as np
# 一维数组
arr_1d = np.array([0, 1, 2, 3, 4])
# 二维数组
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
# 三维数组
arr_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
3. 使用 NumPy 的专用函数
NumPy 提供了许多便捷函数来创建数组:
# 全零数组
zeros = np.zeros((3, 4)) # 3x4 的二维数组
# 全一数组
ones = np.ones((2, 3, 4)) # 2x3x4 的三维数组
# 等差数组(类似 range)
arange = np.arange(0, 10, 2) # [0, 2, 4, 6, 8]
# 等间隔数组(指定元素数量)
linspace = np.linspace(0, 1, 5) # [0.0, 0.25, 0.5, 0.75, 1.0]
# 随机数组
random = np.random.random((2, 2)) # 2x2 的随机浮点数数组
二、切片操作
1. 一维数组切片
- 语法:
array[start:stop:step]
start
:起始索引(包含)stop
:结束索引(不包含)step
:步长(默认为 1)
import numpy as np
arr = np.arange(10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 基本切片
print(arr[2:7:2]) # [2, 4, 6]
# 省略参数
print(arr[2:]) # [2, 3, 4, 5, 6, 7, 8, 9]
print(arr[:5]) # [0, 1, 2, 3, 4]
print(arr[::2]) # [0, 2, 4, 6, 8]
# 负索引
print(arr[-3:]) # [7, 8, 9]
print(arr[-5::-2]) # [4, 2, 0]
2. 多维数组切片
对于 NumPy 的多维数组,每个维度用冒号 :
分隔:
import numpy as np
# 创建一个 4x5 的二维数组
arr_2d = np.arange(20).reshape(4, 5)
print(arr_2d)
# 输出:
# [[ 0 1 2 3 4]
# [ 5 6 7 8 9]
# [10 11 12 13 14]
# [15 16 17 18 19]]
# 二维数组切片
print(arr_2d[1:3, 2:4]) # 选取第2-3行,第3-4列
# 输出:
# [[ 7 8]
# [12 13]]
# 三维数组切片
arr_3d = np.arange(24).reshape(2, 3, 4)
print(arr_3d[:, 1, -2]) # 选取所有第一层的倒数第二个元素
# 输出:[ 6 18]
3. 使用 slice
函数命名切片
通过 slice(start, stop, step)
创建切片对象,方便复用:
import numpy as np
arr = np.arange(10)
# 命名切片
first_half = slice(None, 5) # 等价于 [0:5]
second_half = slice(5, None) # 等价于 [5:]
print(arr[first_half]) # [0, 1, 2, 3, 4]
print(arr[second_half]) # [5, 6, 7, 8, 9]
三、注意事项
- 索引从 0 开始:Python 和 NumPy 的索引均从 0 开始。
- 负数索引:负数索引表示从末尾倒数(例如
-1
表示最后一个元素)。 - 切片不修改原数组:切片操作会返回一个新的视图(View),不会修改原始数组。
- 多维切片:每个维度用逗号分隔,未指定的维度使用
:
表示全部选择。
四、完整示例
import numpy as np
# 创建数组
arr = np.arange(16).reshape(4, 4)
print("原始数组:")
print(arr)
# 输出:
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [12 13 14 15]]
# 切片操作
print("\n切片:第2行,第1-3列")
print(arr[1, 0:3]) # [4 5 6]
print("\n切片:所有偶数行,所有列")
print(arr[::2, :])
# 输出:
# [[ 0 1 2 3]
# [ 8 9 10 11]]
print("\n切片:所有行,偶数列")
print(arr[:, ::2])
# 输出:
# [[ 0 2]
# [ 4 6]
# [ 8 10]
# [12 14]]
通过以上方法,你可以灵活地创建和操作数组及切片,尤其在处理多维数据时,NumPy 提供了强大的功能。