电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python如何實現大型數組運算(使用NumPy)

瀏覽:46日期:2022-07-16 13:54:59

問題

你需要在大數據集(比如數組或網格)上面執行計算。

解決方案

涉及到數組的重量級運算操作,可以使用NumPy庫。NumPy的一個主要特征是它會給Python提供一個數組對象,相比標準的Python列表而已更適合用來做數學運算。下面是一個簡單的小例子,向你展示標準列表對象和NumPy數組對象之間的差別:

>>> # Python lists>>> x = [1, 2, 3, 4]>>> y = [5, 6, 7, 8]>>> x * 2[1, 2, 3, 4, 1, 2, 3, 4]>>> x + 10Traceback (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 * 2array([2, 4, 6, 8])>>> ax + 10array([11, 12, 13, 14])>>> ax + ayarray([ 6, 8, 10, 12])>>> ax * ayarray([ 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的浮點數二維網格,很輕松:

>>> 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>>> gridarray([[ 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列表的索引功能 - 特別是對于多維數組。為了說明清楚,先構造一個簡單的二維數組并試著做些試驗:

>>> a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])>>> aarray([[ 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>>> aarray([[ 1, 2, 3, 4], [ 5, 16, 17, 8], [ 9, 20, 21, 12]])>>> # Broadcast a row vector across an operation on all rows>>> a + [100, 101, 102, 103]array([[101, 103, 105, 107], [105, 117, 119, 111], [109, 121, 123, 115]])>>> aarray([[ 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如何實現大型數組運算(使用NumPy)的詳細內容,更多關于Python 大型數組運算(使用NumPy)的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 芜湖厨房设备_芜湖商用厨具_芜湖厨具设备-芜湖鑫环厨具有限公司 控显科技 - 工控一体机、工业显示器、工业平板电脑源头厂家 | 光伏支架成型设备-光伏钢边框设备-光伏设备厂家 | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | 螺旋绞龙叶片,螺旋输送机厂家,山东螺旋输送机-淄博长江机械制造有限公司 | 发电机价格|发电机组价格|柴油发电机价格|柴油发电机组价格网 | 流变仪-热分析联用仪-热膨胀仪厂家-耐驰科学仪器商贸 | 流程管理|流程管理软件|企业流程管理|微宏科技-AlphaFlow_流程管理系统软件服务商 | 密度电子天平-内校-外校电子天平-沈阳龙腾电子有限公司 | 北京晚会活动策划|北京节目录制后期剪辑|北京演播厅出租租赁-北京龙视星光文化传媒有限公司 | 深圳货架厂家_金丽声精品货架_广东金丽声展示设备有限公司官网 | 沈阳液压泵_沈阳液压阀_沈阳液压站-沈阳海德太科液压设备有限公司 | 精密五金冲压件_深圳五金冲压厂_钣金加工厂_五金模具加工-诚瑞丰科技股份有限公司 | 土壤墒情监测站_土壤墒情监测仪_土壤墒情监测系统_管式土壤墒情站-山东风途物联网 | NMRV减速机|铝合金减速机|蜗轮蜗杆减速机|NMRV减速机厂家-东莞市台机减速机有限公司 | 胜为光纤光缆_光纤跳线_单模尾纤_光纤收发器_ODF光纤配线架厂家直销_北京睿创胜为科技有限公司 - 北京睿创胜为科技有限公司 | 济南冷库安装-山东冷库设计|建造|冷库维修-山东齐雪制冷设备有限公司 | 车载加油机品牌_ 柴油加油机厂家| 智能垃圾箱|垃圾房|垃圾分类亭|垃圾分类箱专业生产厂家定做-宿迁市传宇环保设备有限公司 | 粉末冶金-粉末冶金齿轮-粉末冶金零件厂家-东莞市正朗精密金属零件有限公司 | 上海平衡机-单面卧式动平衡机-万向节动平衡机-圈带动平衡机厂家-上海申岢动平衡机制造有限公司 | 蔬菜清洗机_环速洗菜机_异物去除清洗机_蔬菜清洗机_商用洗菜机 - 环速科技有限公司 | 单电机制砂机,BHS制砂机,制沙机设备,制砂机价格-正升制砂机厂家 单级/双级旋片式真空泵厂家,2xz旋片真空泵-浙江台州求精真空泵有限公司 | 学习安徽网| 软启动器-上海能曼电气有限公司| 英语词典_成语词典_日语词典_法语词典_在线词典网 | 深圳办公室装修,办公楼/写字楼装修设计,一级资质 - ADD写艺 | 废旧物资回收公司_广州废旧设备回收_报废设备物资回收-益美工厂设备回收公司 | 智能家居全屋智能系统多少钱一套-小米全套价格、装修方案 | 东莞压铸厂_精密压铸_锌合金压铸_铝合金压铸_压铸件加工_东莞祥宇金属制品 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 网站建设-网站制作-网站设计-网站开发定制公司-网站SEO优化推广-咏熠软件 | 联系我们-腾龙公司上分客服微信19116098882| 展厅设计公司,展厅公司,展厅设计,展厅施工,展厅装修,企业展厅,展馆设计公司-深圳广州展厅设计公司 | pH污水传感器电极,溶解氧电极传感器-上海科蓝仪表科技有限公司 | 陕西华春网络科技股份有限公司 | 水质监测站_水质在线分析仪_水质自动监测系统_多参数水质在线监测仪_水质传感器-山东万象环境科技有限公司 | 棕刚玉_白刚玉_铝酸钙-锐石新材料 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 济南保安公司加盟挂靠-亮剑国际安保服务集团总部-山东保安公司|济南保安培训学校 | 国际学校_国际学校哪个好_国际课程学校-国际学校择校网 | TPE_TPE热塑性弹性体_TPE原料价格_TPE材料厂家-惠州市中塑王塑胶制品公司- 中塑王塑胶制品有限公司 |