本文是对官方文档的翻译,原文在此What is NumPy? - NumPy v1.14 Manual​docs.scipy.org

以下开始正文。

NumPy是Python的一个用于科学计算的基础包。它提供了多维数组对象,多种衍生的对象(例如隐藏数组和矩阵)和一个用于数组快速运算的混合的程序,包括数学,逻辑,排序,选择,I/O,离散傅立叶变换,基础线性代数,基础统计操作,随机模拟等等。

NumPy包的核心是ndarray对象。它封装了n维同类数组。很多运算是由编译过的代码来执行的,以此来提高效率。NumPy数组和标准Python序列有以下几点重大区别:NumPy数组创建的时候有一个固定的大小,不像Python列表可以动态地增加要素。改变一个ndarray的大小会创建一个新的数组并删除原数组。

NumPy数组中的要素必须是同一个数据类型,从而在内存中是同样的大小。唯一例外是可以由Python(包括NumPy)对象作为要素组成数组,因此允许有要素大小不同的数组的存在。

NumPy数组更有利于大规模数据的高级数学运算。通常来说,这些运算执行更高效,并且代码量比用Python自带的序列来实现更少。

越来越多的科学和数学Python包使用NumPy数组;虽然这些包通常支持Python序列输入,但它们通常在处理前把输入转化为NumPy数组。换据话说,想要高效地使用当今很多(甚至是大部分)基于Python的科学或数学计算软件,只是了解如何使用Python内置的序列类型已经不够了,你必须知道如何使用NumPy数组。

序列大小和速度在科学计算中尤其重要。举个简单例子,例如对一个1维数组上的每一个要素乘以另一个同样长度的数组上对应位置上的要素,如果数据存储在两个Python列表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编程的好处。更进一步讲,编程工作量会随着数据维度的增加而增加。例如,对于2D数组,C代码要扩展成这样:

for (i = 0; i < rows; i++): {

for (j = 0; j < columns; j++): {

c[i][j] = a[i][j]*b[i][j];

}

}

NumPy则同时有这两种方式的最好处:如果涉及到ndarray,逐个要素的运算是“默认的模式”,但同时逐个要素的计算是由预先编译好的C代码高效执行的。用NumPy

c = a * b

用接近C语言的速度完成了我们前面的例子做的相同事情,并且保留了我们期待的Python语言的简洁性。事实上NumPy语法比Python更加简洁!以上这个例子揭示了NumPy的两个特性:矢量化(vectorization)和广播机制(broadcasting)。

矢量化解释了为什么不需要显式地循环,索引等等操作。当然这些操作只是在背后用优化过的编译好的C语言完成了。矢量化的代码有很多好处,包括:矢量化的代码更加简洁和易读

更少的代码通常意味着更少错误

代码更类似标准数学符号(使得编写数学结构更加简单)

矢量化使得代码更具Python风格。如果没有矢量化,代码里会充斥着低效和难读的for循环。

广播机制是指暗含的逐个要素进行的运算;通常而言,在NumPy中,不只是算术运算,包括逻辑,位操作,函数等等所有运算都暗含这种机制。而且,在上面的例子中,a和b可以是两个相同形状的多维数组,或者一个向量和一个数组,甚至两个不同形状的数组,前提是较小的数组可以以一种明确的方式扩展成跟较大的数组一样的形状。更具体的规则,参见这篇文章。Broadcasting - NumPy v1.14 Manual​docs.scipy.org

NumPy的ndarray完全支持面向对象的方式。例如,ndarray是一个类,拥有大量的方法和属性。它的很多方法复制了NumPy最外层的命名空间的函数,给程序员完全的自由去选择自己喜欢或者适合手头任务的方式来写代码。

python中numpy是什么_什么是NumPy?相关推荐

  1. python中average什么意思_在Python3 numpy中mean和average的区别详解

    mean和average都是计算均值的函数,在不指定权重的时候average和mean是一样的.指定权重后,average可以计算一维的加权平均值. 具体如下: import numpy as np ...

  2. python中复数的乘法_不一致的numpy复数乘法结果

    首先,这并不是针对mp的内容,但是由于它是在评论中提出的: np.matrix可以接受一个字符串参数,并从中生成一个数值矩阵.还要注意形状是(1,1)In [145]: a = np.matrix(' ...

  3. Python中单个下划线“ _”变量的用途是什么?

    这段代码中_ after for的含义是什么? if tbh.bag:n = 0for _ in tbh.bag.atom_set():n += 1 #1楼 下划线_在Python中被视为" ...

  4. Python中单个下划线“_”变量的目的是什么?

    在Python中,下划线_被视为" 我不关心 "或" 丢失 "变量 python解释器将最后一个表达式值存储到名为的特殊变量中_. >>> 1 ...

  5. python中的下划线_讲解

    python中,下划线 "_""_"" \_" 不管是单独作为变量名或者作为变量名的前缀或者后缀,是有特殊含义的,下面简要的来总结一下. 1 ...

  6. python中nlp的库_单词袋简介以及如何在Python for NLP中对其进行编码

    python中nlp的库 by Praveen Dubey 通过Praveen Dubey 单词词汇入门以及如何在Python中为NLP 编写代码的简介 (An introduction to Bag ...

  7. python中fit什么意思_使用Logit()和fit()在python中进行逻辑回归

    我尝试使用以下代码在python中执行logistic回归-from patsy import dmatrices import numpy as np import pandas as pd imp ...

  8. Python中带下划线_的变量和函数命名的用法

    Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就易于阅读, ...

  9. python中case的用法_用 Python 实现简单的 switch/case 语句

    在Python中是没有Switch / Case语句的,很多人认为这种语句不够优雅灵活,在Python中用字典来处理多条件匹配问题字典会更简单高效,对于有一定经验的Python玩家不得不承认,的确如此 ...

  10. python中hist函数参数_用hist参数解释Python,python,解读

    python用hist参数解读 python 中绘制hist的方法有很多,我经常用的是matplotlib直接用x,y绘制:Dataframe直接.hist绘制: 绘制直方图 1.bins为80的图形 ...

最新文章

  1. 【 FPGA 】FIR 滤波器之多相插值器(Polyphase Interpolator)
  2. C++ Opengl 透明纹理源码
  3. Nginx server_name正则表达式匹配配置
  4. C#:RichTextBox 追加其它颜色的行列
  5. Java基础5一数组的常见应用算法
  6. Bootstrap 支持的设备类型
  7. 自动化测试之Appium模拟机测试
  8. springboot怎么返回404_Spring Boot2 系列教程(十三)Spring Boot 中的全局异常处理
  9. ECharts插件的使用
  10. 简易博客编辑器:玩转document.execCommand命令
  11. 围棋知名AI-KataGo 下载分享
  12. 值得看看的艺术影片 (转)
  13. 桌面IE不见的处理方法
  14. 瑞士轮赛制模拟器_【入门必读】VGC综合介绍(下篇)【翻译】
  15. 平板时代即将到来,写在即将发布Win8 Surface平板和iPad Mini之际
  16. Android 12 首个开发者预览版到来
  17. 【C++版Opencv】【Ubuntu】VScode配置Opencv
  18. EFR32晶体校准指南
  19. 分享125个ASP源码,总有一款适合你
  20. 2022年自考专业考试(英语)外贸函电练习题

热门文章

  1. Z-Blog 爬虫 node实现
  2. android 车辆轨迹,Android自定义view实现车载可调整轨迹线
  3. centos7 kafka2.3.1单点部署
  4. 自定义安装mysql linux_linux下 安装mysql 问题
  5. 定期定量采购_?采购计划员必备:各种物料采购计划与订单制定的技巧与方法...
  6. 多表操作查询 一对一
  7. 用Java和ffmpeg把音频和视频合成视频
  8. 【Git、GitHub、GitLab】四 Git文件重命名的简单方法以及使用git log查看版本演变历史
  9. maven 解决冲突
  10. oracle-SYSTEM表空间的备份与恢复