NumPy是Python科学计算的核心库,提供高性能多维数组ndarray及向量化操作工具。通过import numpy as np导入后,可使用np.array()、np.zeros()、np.ones()、np.linspace()等函数创建数组,相比Python列表,ndarray存储同类型数据,内存连续,计算效率更高。支持元素级运算、广播机制、布尔索引和reshape等形状操作,聚合函数如sum、mean可沿指定轴计算,linalg模块支持矩阵运算,广泛应用于数据分析与机器学习。

NumPy是Python进行科学计算的核心库,它提供了一个高性能的多维数组对象(ndarray)以及用于处理这些数组的工具。简单来说,如果你想在Python里高效地处理大量数值数据,尤其是进行向量化操作,NumPy几乎是不可或缺的选择。它让复杂的数学运算变得简洁而快速。
要使用NumPy,第一步自然是导入它:
import numpy as np
np
ndarray
ndarray
我们通常通过几种方式创建NumPy数组。最直接的是从Python列表转换:
arr = np.array([1, 2, 3, 4])
np.zeros((3, 4))
np.ones((2, 2))
np.arange(0, 10, 2)
np.linspace(0, 1, 5)
一旦有了数组,操作就变得非常直观。NumPy支持元素级的数学运算,这意味着你可以直接对整个数组进行加减乘除,而不需要写循环。例如,
arr * 2
立即学习“Python免费学习笔记(深入)”;
索引和切片也与Python列表类似,但功能更强大。你可以用
arr[0]
arr[1:3]
matrix = np.array([[1, 2, 3], [4, 5, 6]])
matrix[0, 1]
arr[arr > 5]
数组的形状(shape)操作也是日常。
arr.shape
arr.reshape((new_rows, new_cols))
reshape
我们经常会遇到一个问题:既然Python有列表,为什么还需要NumPy数组?这其实是效率和功能定位的根本区别。Python列表在设计上是为了通用性,它可以存储任何类型的对象,并且大小是动态变化的。这种灵活性是以牺牲性能为代价的。当你处理几十万、上百万甚至上亿的数值数据时,Python列表的迭代和计算会变得异常缓慢,内存占用也高得惊人。
NumPy数组则完全不同。它的核心是一个固定大小、同质类型元素的连续内存块。这意味着数据存储更紧凑,处理器可以更高效地访问和操作这些数据。这种“同质性”是关键,它允许NumPy在底层使用高度优化的C/Fortran代码来执行向量化操作,比如矩阵乘法、元素级运算等,其速度比Python的for循环快上几十甚至几百倍。
从用途上看,Python列表更适合存储异构数据集合,比如一个包含字符串、数字、对象混合的购物车列表。而NumPy数组则专注于数值计算,是科学计算、数据分析、机器学习领域的基础。无论是处理图像像素、音频信号、股票数据,还是训练神经网络,NumPy都提供了坚实而高效的底层支持。可以说,没有NumPy,Python在科学计算领域的地位会大打折扣。所以,不是说谁取代谁,而是它们各司其职,相辅相成。
创建NumPy数组远不止从Python列表转换那么简单。了解不同的创建方法,可以让我们更灵活、更高效地生成所需的数据结构。除了
np.array()
比如,
np.zeros(shape)
np.ones(shape)
np.full(shape, fill_value)
对于序列数据,
np.arange(start, stop, step)
range()
np.linspace(start, stop, num)
np.linspace(0, 10, 50)
随机数生成也是NumPy的强项。
np.random.rand(d0, d1, ...)
np.random.randn(d0, d1, ...)
np.random.randint(low, high, size)
此外,还有
np.empty(shape)
理解这些创建函数,能让我们在面对不同的数据初始化需求时,选择最合适、最有效的方法,避免不必要的性能损耗。
NumPy的魅力不仅在于基本的创建和索引,更在于它提供了一系列强大的高级操作,让复杂的数据处理变得简洁高效。
广播(Broadcasting)是我认为NumPy最“魔幻”的特性之一。它允许NumPy在执行算术运算时,自动处理形状不同的数组。举个例子,一个形状为
(3, 4)
(4,)
聚合函数(Aggregation Functions)也是日常数据分析的利器。
arr.sum()
arr.mean()
arr.max()
arr.min()
arr.std()
axis
matrix.sum(axis=0)
matrix.sum(axis=1)
线性代数操作是NumPy另一个核心优势。
np.dot(a, b)
@
np.matmul(a, b)
linalg
np.linalg.inv()
np.linalg.det()
np.linalg.eig()
深入理解这些高级操作,能够让你充分发挥NumPy的潜力,解决那些用纯Python列表处理起来会非常繁琐和低效的问题。它们是NumPy之所以强大的真正原因。
以上就是Python怎么使用NumPy库_NumPy数组操作教程一览的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号