写点什么

NumPy 用户手册

作者:安信无限
  • 2025-05-26
    北京
  • 本文字数:922 字

    阅读完需:约 3 分钟


什么是 NumPy

在 Python 体系中,NumPy 是一个科学计算领域的基础组件。几乎可以这么说,没有 NumPy 就没有今天庞大的 Python 科学计算帝国。它提供了一套多维度数组的实现,多维数组的一些变种以及一套数组操作的方法。这些方法中有数学,逻辑,维度,排序,选择,输入输出,离散傅立叶变换,线性代数,统计,随机模拟等等。


NumPy 的核心是一个叫做`ndarray`的对象。它是由 n 维同类型的数据,加上对应的一组高性能操作组成的。NumPy 的数组和 Python 的序列之间有几个重要的不同点:


  • NumPy 的数组是固定大校的,任何改变大小的行为都会重新创建一个新的数组,同时删除旧的数组。而 Python 的序列是动态增长的。

  • NumPy 中的基本类型数据必需是相同类型的,也就是在内存中要占用相同的大小。一个例外是对象类型和 Python 的序列相同,是可以存储不同大小的对象。

  • NumPy 可以比较容易的对大量数据进行高级数学等的一些操作,这些操作同时也会非常高效和简洁

  • NumPy 被大量的科学计算和数学库使用,仅仅会使用 Python 的序列是不够的,同时必需要会使用 NumPy


序列的大小和计算的速度在科学计算中是非常重要的。举一个简单的例子,假设一个一维的数组和另一个相同长度的数组对应元素相乘。如果使用两个 Python 的 list(a 和 b)来实现,代码如下:


c = []for i in range(len(a)):    c.append(a[i] * b[i])
复制代码


这段代码产生正确的结果,但是如果 a 和 b 每个都包含百万级别的数字,我们通过 Python 去循环计算的开销就太大了,如果我们使用 C 语言去完成相同的任务,开销会降低很多


for (i = 0; i < rows; i++) {  c[i] = a[i]*b[i];}
复制代码


这段代码去掉了 Python 解释器解释和操作 Python 对象的开销,但是是以牺牲了 Python 编码的诸多好处为代价的。如果我们去增加数据的维度,比如变为两个维度,就有


for (i = 0; i < rows; i++) {  for (j = 0; j < columns; j++) {    c[i][j] = a[i][j]*b[i][j];  }}
复制代码


NumPy 则同时具备这两种优点:简洁直观的标准模式和类似与 C 语言一样快速的计算速度:


c = a * b
复制代码


事实上 NumPy 的方式更为简洁。这个例子展示了 NumPy 的两个基本的特点:向量化和传播。


为什么 NumPy 很快?


哪些用户在使用 NumPy?

用户头像

安信无限

关注

还未添加个人签名 2025-05-20 加入

还未添加个人简介

评论

发布
暂无评论
NumPy用户手册_Numpy_安信无限_InfoQ写作社区