1. 从列表到数组的基础认知
在数据处理的初学阶段,Python 的数组处理能力通常从最常见的列表开始,再扩展到更高效的数组结构 NumPy。本节聚焦于 Python 数组处理基础教学:从列表到 NumPy 的完整入门指南,帮助你从基本的数据结构到高效计算的路径清晰起来。
列表是 Python 的原生序列数据结构,用于按顺序存储可变长度元素,易于访问与修改,但在大规模数值计算中存在性能瓶颈。
理解两者的差异有助于选择合适的数据结构,列表适合多样化元素类型,NumPy 数组更适合数值型矩阵运算。
1.1 列表的创建与访问
要创建一个简单的列表,使用方括号,例如 lst = [1, 2, 3, 4]。通过索引可以访问元素,正向索引从 0 开始,反向索引从 -1 代表最后一个。
对列表进行切片时,lst[1:3] 获取第二到第三个元素(不包含索引 3),这在数据切分时非常有用。
# 列表创建与访问示例
lst = [1, 2, 3, 4]
print(lst[0]) # 1
print(lst[-1]) # 4
print(lst[1:3]) # [2, 3]
1.2 列表的常见操作与切片
常用操作包括 append、extend、insert、remove、pop,用于在末尾添加元素、拼接序列、插入位置与删除元素。
列表推导式(list comprehension)提供简洁的构造方式,[x*2 for x in lst] 这类表达式在数据清洗中非常常见。
# 常见操作示例
lst = [1, 2, 3]
lst.append(4) # [1, 2, 3, 4]
lst.extend([5,6]) # [1, 2, 3, 4, 5, 6]
lst.insert(2, 'a') # [1, 2, 'a', 3, 4, 5, 6]
lst.remove('a') # [1, 2, 3, 4, 5, 6]
last = lst.pop() # 6; lst = [1, 2, 3, 4, 5]
2. NumPy 入门:数组的核心结构
进入高效数值计算的世界,NumPy 提供多维数组对象和向量化运算能力,显著提升大规模数据处理的速度。
与 Python 原生列表相比,NumPy 数组具有统一数据类型、固定长度、以及高效的底层实现,能减少内存占用并支持广播等特性。
2.1 NumPy 数组的创建与属性
创建数组最常用的方式是 np.array,也有 np.arange、np.zeros、np.ones 等工厂函数来快速生成数组。
常用属性包括 shape、dtype、ndim,用于描述数组的维度、数据类型与维数,帮助你在后续的运算中避免维度错配。
import numpy as npa = np.array([1, 2, 3, 4])
print(a.shape) # (4,)
print(a.dtype) # int64 或 int32,视平台而定
2.2 向量化运算与广播
向量化运算是 NumPy 的核心竞争力,无需显式循环即可对整组数据进行运算,这带来巨大的速度提升。
广播规则允许在不同形状的数组之间进行运算,通过自动扩展维度实现对齐,例如将标量与数组相乘,或将形状为 (3,1) 的数组与 (3,4) 的数组相乘。
import numpy as npx = np.array([1, 2, 3])
y = np.array([4, 5, 6])
z = x * y # 元素逐个相乘
print(z) # [4 10 18]A = np.array([[1], [2], [3]])
B = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
C = A * B # 广播:将 (3,1) 与 (3,3) 相乘,结果形状 (3,3)
print(C)
3. 实战:从列表到 NumPy 的互操作
在实际项目中,常需要 把现有的 Python 列表转为 NumPy 数组,再利用 NumPy 的高效运算能力进行分析与特征处理。
互操作的关键在于 使用 numpy.asarray 或 numpy.array 将数据转换为数组,同时注意副作用与内存拷贝的问题。
3.1 列表转换为 NumPy 数组及回转
将列表转换为数组最直接的方式是 np.array(list),它会创建一个新数组并复制数据。
若你只是需要一个视图而非拷贝,可以使用 np.asarray(list),在原数据是数组时尤其有用。

import numpy as nplst = [1, 2, 3, 4]
arr = np.array(lst)
print(arr, arr.dtype)lst_back = arr.tolist()
print(lst_back)
3.2 常见坑与调优
注意 dtype 不匹配会导致隐式类型转换或错误,在数据来源不统一时尤其需要显式指定 dtype。
对于大规模数据,尽量使用向量化操作和批量处理,避免 Python 循环,以降低解释器开销。


