需要在大数据集(比如数组或网格) 上面执行计算,涉及到数组的重量级运算操作,可以使用NumPy 库。

下面是一个简单的小例子,展示标准列表对象和NumPy 数组对象之间的差别

>>> x = [1, 2, 3, 4]
>>> y = [5, 6, 7, 8]
>>> x * 2
[1, 2, 3, 4, 1, 2, 3, 4]
>>> x + 10
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "int") to list
>>> x + y
[1, 2, 3, 4, 5, 6, 7, 8]
>>> # Numpy arrays
>>> import numpy as np
>>> ax = np.array([1, 2, 3, 4])
>>> ay = np.array([5, 6, 7, 8])
>>> ax * 2
array([2, 4, 6, 8])
>>> ax + 10
array([11, 12, 13, 14])
>>> ax + ay
array([ 6, 8, 10, 12])
>>> ax * ay
array([ 5, 12, 21, 32])

正如所见,两种方案中数组的基本数学运算结果并不相同。特别的, NumPy 中的标量运算(比如ax * 2 或ax + 10 ) 会作用在每一个元素上。另外,当两个操作数都是数组的时候执行元素对等位置计算,并最终生成一个新的数组。

对整个数组中所有元素同时执行数学运算可以使得作用在整个数组上的函数运算简单而又快速。比如,如果你想计算多项式的值,可以这样做:

>>> def f(x):
... return 3*x**2 - 2*x + 7
...
>>> f(ax)
array([ 8, 15, 28, 47])

NumPy 还为数组操作提供了大量的通用函数,这些函数可以作为math 模块中类似函数的替代。

>>> np.sqrt(ax)
array([ 1. , 1.41421356, 1.73205081, 2. ])
>>> np.cos(ax)
array([ 0.54030231, -0.41614684, -0.9899925 , -0.65364362])

使用这些通用函数要比循环数组并使用math 模块中的函数执行计算要快的多。因此,只要有可能的话尽量选择NumPy 的数组方案。

底层实现中, NumPy 数组使用了C 或者Fortran 语言的机制分配内存。也就是说,它们是一个非常大的连续的并由同类型数据组成的内存区域。所以,可以构造一个比普通Python 列表大的多的数组。比如,如果你想构造一个10,000*10,000 的浮点数二维网格,很轻松:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> grid = np.zeros(shape=(10000,10000), dtype=float)
>>> grid
array([[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
...,
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.]])

所有的普通操作还是会同时作用在所有元素上:

>>> grid += 10
>>> grid
array([[ 10., 10., 10., ..., 10., 10., 10.],
[ 10., 10., 10., ..., 10., 10., 10.],
[ 10., 10., 10., ..., 10., 10., 10.],
...,
[ 10., 10., 10., ..., 10., 10., 10.],
[ 10., 10., 10., ..., 10., 10., 10.],
[ 10., 10., 10., ..., 10., 10., 10.]])
>>> np.sin(grid)
array([[-0.54402111, -0.54402111, -0.54402111, ..., -0.54402111,
-0.54402111, -0.54402111],
[-0.54402111, -0.54402111, -0.54402111, ..., -0.54402111,
-0.54402111, -0.54402111],
[-0.54402111, -0.54402111, -0.54402111, ..., -0.54402111,
-0.54402111, -0.54402111],
...,
[-0.54402111, -0.54402111, -0.54402111, ..., -0.54402111,
-0.54402111, -0.54402111],
[-0.54402111, -0.54402111, -0.54402111, ..., -0.54402111,
-0.54402111, -0.54402111],
[-0.54402111, -0.54402111, -0.54402111, ..., -0.54402111,
-0.54402111, -0.54402111]])
>>>

关于NumPy 有一点需要特别的主意,那就是它扩展Python 列表的索引功能- 特别是对于多维数组。为了说明清楚,先构造一个简单的二维数组并试着做些试验:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
>>> a
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
>>> # Select row 1
>>> a[1]
array([5, 6, 7, 8])
>>> # Select column 1
>>> a[:,1]
array([ 2, 6, 10])
>>> # Select a subregion and change it
>>> a[1:3, 1:3]
array([[ 6, 7],
[10, 11]])
>>> a[1:3, 1:3] += 10
>>> a
array([[ 1, 2, 3, 4],
[ 5, 16, 17, 8],
[ 9, 20, 21, 12]])
>>> a + [100, 101, 102, 103]
array([[101, 103, 105, 107],
[105, 117, 119, 111],
[109, 121, 123, 115]])
>>> a
array([[ 1, 2, 3, 4],
[ 5, 16, 17, 8],
[ 9, 20, 21, 12]])
>>> # Conditional assignment on an array
>>> np.where(a < 10, a, 10)
array([[ 1, 2, 3, 4],
[ 5, 10, 10, 8],
[ 9, 10, 10, 10]])

NumPy 是Python 领域中很多科学与工程库的基础,同时也是被广泛使用的最大最复杂的模块。即便如此,在刚开始的时候通过一些简单的例子和玩具程序也能帮我们完成一些有趣的事情。
通常我们导入NumPy 模块的时候会使用语句import numpy as np 。这样的话你就不用再你的程序里面一遍遍的敲入numpy ,只需要输入np 就行了,节省了不少时间。
如果想获取更多的信息, 你当然得去NumPy 官网逛逛了, 网址是: http://www.numpy.org

Python: 大型数组运算相关推荐

  1. 《Python Cookbook 3rd》笔记(3.9):大型数组运算

    大型数组运算 问题 你需要在大数据集 (比如数组或网格) 上面执行计算. 解法 涉及到数组的重量级运算操作,可以使用 NumPy 库. NumPy 的一个主要特征是它会给 Python 提供一个数组对 ...

  2. 学习Python+numpy数组运算和矩阵运算看这254页PPT就够了

    温馨提示: 关注微信公众号"Python小屋",然后在公众号后台发送消息"大事记"可以查看董付国老师与Python有关的重要事件:后台发送消息"教材& ...

  3. python 数组 运算_python数据分析(二) python numpy--数组和矢量运算--数组对象

    Numpy numpy是数值计算最重要的基础包,几乎所有的科学运算的模块底层所用的都是numpy数组. Numpy本身没有提供多么高级的数据分析功能,他所提供的功能主要是: 1.具有矢量算术运算(用数 ...

  4. python计算数组元素的和_python中数组的运算

    Python中进行数组的运算需要调用NumPy包. 其官网是:http://www.numpy.org/​www.numpy.org NumPy是Python语言的一个扩充程序库.它支持高级大量的维度 ...

  5. python同时发送与接收_Python如何发送与接收大型数组

    问题 你要通过网络连接发送和接受连续数据的大型数组,并尽量减少数据的复制操作. 解决方案 下面的函数利用 memoryviews 来发送和接受大数组: # zerocopy.py def send_f ...

  6. python 多维数组去重_python多维数组运算-女性时尚流行美容健康娱乐mv-ida网

    自动秒收录 如何加入 (当前页) 购买本站源码 自媒体交流 查询是否收录 查询收录 × 快速加入 只要做上本站的友情链接,并在您站上点击一次,就免人工自动收录!并自动排在本站第一位. 本站已收录286 ...

  7. Python高级数组处理模块numpy用法精要

    numpy是Python的高级数组处理扩展库,提供了Python中没有的数组对象,支持N维数组运算.处理大型矩阵.成熟的广播函数库.矢量运算.线性代数.傅里叶变换以及随机数生成等功能,可与C++.FO ...

  8. python的数组批量赋值_python数组赋值

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 在学习python过程中数组是个逃不过去的一个关,既然逃不过去咱就勇敢面对它,学 ...

  9. python建立数组_python建立数组

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! numpy(numeric python,以numpy导入)是一系列高效的.可并 ...

最新文章

  1. ubuntu 16.04 python3 使用ryu
  2. linux mysql清除缓存_案例:通过shell脚本实现mysql数据备份与清理
  3. 推荐几个华为,字节跳动、蚂蚁金服等大佬的公众号
  4. Fiddler 学习笔记---命令、断点
  5. 【React Native开发】React Native控件之DrawerLayoutAndroid抽屉导航切换组件解说(13)
  6. Android系统性能优化(69)---含内存优化、布局优化
  7. 豆瓣评论【数据集分享】
  8. macOS Catalina 10.15.7 ISO/CDR 虚拟机镜像下载
  9. 845.数组中的最长山脉
  10. 基于springboot的人才求职招聘平台设计与实现
  11. 不一样的xss payload
  12. 基于SSM纺织品公司订单管理系统
  13. python中的正则表达式re模块_Python中的re模块--正则表达式
  14. Java调用热敏打印机
  15. 练习print函数的使用(python)
  16. AP计算机自学笔记:方法参数
  17. 华为HCNA实验操作之常用操作命令11-20
  18. 只安装mysql数据库客户端吗_如何安装MySQL数据库和navicat客户端?
  19. 基于PHP的网上租车租赁网站设计与实现
  20. MySQL练习整理(每日习题)

热门文章

  1. ORACLE使用GV_$TEMP_SPACE_HEADER统计临时表空使用情况不准确的问题
  2. Qt之QPushButton
  3. 对称加密(4) NET对称加密实践
  4. Attachments failing with invalid id (Bugtraker.net)
  5. 【ABAP增强】基于源代码的增强
  6. ABAP物料仓位扩充
  7. 20、Power Query-数据合并、拆分
  8. 4、Power Query-智能汇总工作簿下的指定或所有工作表数据
  9. 创建Invoice和公司间Invoice
  10. 504 Gateway Time-out错误的解决方法