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

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

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

瀏覽:45日期: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 編程
相關文章:
主站蜘蛛池模板: 二手Sciex液质联用仪-岛津气质联用仪-二手安捷伦气质联用仪-上海隐智科学仪器有限公司 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | SF6环境监测系统-接地环流在线监测装置-瑟恩实业 | ge超声波测厚仪-电动涂膜机-电动划格仪-上海洪富 | 异噻唑啉酮-均三嗪-三丹油-1227-中北杀菌剂厂家 | 影合社-影视人的内容合作平台 | 紧急泄压人孔_防爆阻火器_阻火呼吸阀[河北宏泽石化] | ERP企业管理系统永久免费版_在线ERP系统_OA办公_云版软件官网 | 骨密度仪-骨密度测定仪-超声骨密度仪-骨龄测定仪-天津开发区圣鸿医疗器械有限公司 | CE认证_FCC认证_CCC认证_MFI认证_UN38.3认证-微测检测 CNAS实验室 | 肉嫩度仪-凝胶测试仪-国产质构仪-气味分析仪-上海保圣实业发展有限公司|总部 | 上海风淋室_上海风淋室厂家_上海风淋室价格_上海伯淋 | 干式变压器厂_干式变压器厂家_scb11/scb13/scb10/scb14/scb18干式变压器生产厂家-山东科锐变压器有限公司 | 电镀整流器_微弧氧化电源_高频电解电源_微弧氧化设备厂家_深圳开瑞节能 | 北京签证代办_签证办理_商务签证_旅游签证_寰球签证网 | 成都热收缩包装机_袖口式膜包机_高速塑封机价格_全自动封切机器_大型套膜机厂家 | 北京康百特科技有限公司-分子蒸馏-短程分子蒸馏设备-实验室分子蒸馏设备 | 餐饮小吃技术培训-火锅串串香培训「何小胖培训」_成都点石成金[官网] | 国产液相色谱仪-超高效液相色谱仪厂家-上海伍丰科学仪器有限公司 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 酒精检测棒,数显温湿度计,酒安酒精测试仪,酒精检测仪,呼气式酒精检测仪-郑州欧诺仪器有限公司 | 小型高低温循环试验箱-可程式高低温湿热交变试验箱-东莞市拓德环境测试设备有限公司 | 耐热钢-耐磨钢-山东聚金合金钢铸造有限公司| 体感VRAR全息沉浸式3D投影多媒体展厅展会游戏互动-万展互动 | LED灯杆屏_LED广告机_户外LED广告机_智慧灯杆_智慧路灯-太龙智显科技(深圳)有限公司 | 水质监测站_水质在线分析仪_水质自动监测系统_多参数水质在线监测仪_水质传感器-山东万象环境科技有限公司 | 威实软件_软件定制开发_OA_OA办公系统_OA系统_办公自动化软件 | 净化车间装修_合肥厂房无尘室设计_合肥工厂洁净工程装修公司-安徽盛世和居装饰 | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 物联网卡_物联网卡购买平台_移动物联网卡办理_移动联通电信流量卡通信模组采购平台? | EPK超声波测厚仪,德国EPK测厚仪维修-上海树信仪器仪表有限公司 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 北京遮阳网-防尘盖土网-盖土草坪-迷彩网-防尘网生产厂家-京兴科技 | 深圳活动策划公司|庆典策划|专业公关活动策划|深圳艺典文化传媒 重庆中专|职高|技校招生-重庆中专招生网 | 飞扬动力官网-广告公司管理软件,广告公司管理系统,喷绘写真条幅制作管理软件,广告公司ERP系统 | 光谱仪_积分球_分布光度计_灯具检测生产厂家_杭州松朗光电【官网】 | 安徽免检低氮锅炉_合肥燃油锅炉_安徽蒸汽发生器_合肥燃气锅炉-合肥扬诺锅炉有限公司 | 酒吧霸屏软件_酒吧霸屏系统,酒吧微上墙,夜场霸屏软件,酒吧点歌软件,酒吧互动游戏,酒吧大屏幕软件系统下载 | 注塑模具_塑料模具_塑胶模具_范仕达【官网】_东莞模具设计与制造加工厂家 | 新疆系统集成_新疆系统集成公司_系统集成项目-新疆利成科技 | 乙炔气体报警装置|固定式氯化氢检测仪|河南驰诚电气百科 |