python数组及切片的创建与操作总结

在 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]

三、注意事项

  1. 索引从 0 开始:Python 和 NumPy 的索引均从 0 开始。
  2. 负数索引:负数索引表示从末尾倒数(例如 -1 表示最后一个元素)。
  3. 切片不修改原数组:切片操作会返回一个新的视图(View),不会修改原始数组。
  4. 多维切片:每个维度用逗号分隔,未指定的维度使用 : 表示全部选择。

四、完整示例

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 提供了强大的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值