python中numpy是什么_什么是NumPy?

本文是对官方文档的翻译,原文在此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最外层的命名空间的函数,给程序员完全的自由去选择自己喜欢或者适合手头任务的方式来写代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java for循环 等待_java – 主题:忙等待 – 空循环

参见英文答案 > Is this starvation? 2个在我们的大学课程中,我们学习了Threads并使用“Busy Waiting”方法作为在TrafficLight等待的汽车的示例.为此,我们构建了三个类&#xff1a;> TrafficLight(实现Runnable)>汽车(实现Runna…

人物角色群体攻击判定(一)

我们制作3D动作游戏的时候,常常主人公是一对多人进行攻击,或者敌人在角色前方一定范围内进行攻击. 我们怎么实现这种效果呢&#xff1f; 1. 使用触发器(多体攻击)方便调试,可视化(推荐)2. 运用点乘和叉乘,判断敌人的角度和位置(单,多)一般3. 使用Physics的Physics.OverlapSpher…

mfc cimage加载显示图片_在微信小程序里实现图片预加载组件

网页中的图片预加载我们知道在 Web 页面中实现图片的预加载其实很简单&#xff0c;通常的做法是在 JS 中使用 Image 对象即可&#xff0c;代码大致如下var image new Image() image.onload function() {console.log(图片加载完成) } image.src"//misc.360buyimg.com/lib…

java mongodb 删除字段类型_Mongodb基本数据类型、常用命令之增加、更新、删除

1.null---表示空值或者该字段不存在&#xff0c;如{"name"&#xff1a;null}2.布尔 --- 和java中的布尔一样&#xff0c;有两种&#xff1a;true,false,如{"sex":true}3.浮点数---shell中所有的数字都是浮点数&#xff0c;如{"age":12},{"m…

HDU 2242 双连通分量 考研路茫茫——空调教室

思路就是求边双连通分量&#xff0c;然后缩点&#xff0c;再用树形DP搞一下。 代码和求强连通很类似&#xff0c;有点神奇&#xff0c;_&#xff0c;慢慢消化吧 1 #include <cstdio>2 #include <cstring>3 #include <algorithm>4 #include <vector>5 #…

wxpython菜单栏嵌套窗口_如何在wxpython中使嵌套的Panel和Sizer工作

此处的逻辑是创建一个Panel,在其中添加控件,然后创建一个BoxSizer,在其中声明您在Panel中添加的每个控件在调整大小时的行为,并最终在Panel上设置应用BoxSizer的对象.您有2期.>首先,您缺少posPnlobject的上述语句的最后一部分.添加&#xff1a;posPnl.SetSizer(posPnlSzr)将…

Java多态与反射

多态通过分离做什么和怎么做&#xff0c;从另一个角度将接口与实现分离开来&#xff1b;通过多态来消除类型之间的耦合关系&#xff0c;在Java中&#xff0c;多态也叫动态绑定&#xff0c;后期绑定或运行时绑定&#xff0c;那么什么是方法绑定&#xff1f; 方法调用绑定&#x…

java webservice用户验证_使用java webservice的.net4.0 web app需要Usernametoken身份验证

我是使用.net 4.0 VS2010的新手。我需要使用java web服务并发送usernametoken自定义身份验证来访问服务&#xff0c;这是我很容易在VS2005中使用WSE2.0&#xff0c;那么在net 4.0中替换它是什么&#xff1f;我的客户端是.net 4.0 Asp.net Web应用程序(网站)&#xff0c;服务是j…

python随机数模块_python 随机数模块 -- random

一、概述这个模块实现的伪随机数生成器。对于整数&#xff0c;从区间选取。对于序列&#xff0c;随机元素。在实线的&#xff0c;有功能来计算均匀分布&#xff0c;正态分布(高斯) &#xff0c;对数正态分布&#xff0c;负指数&#xff0c;γ和β分布。对于生成的角度分布&…

织梦dedecms5.7二级域名文章图片不显示修改方法.相对路径改为绝对路径的方法...

dedecms升级到5.7SP1后&#xff0c;开启二级域名&#xff0c;你会发现&#xff0c;在二级域名下的文章&#xff0c;上传的图片地址都是&#xff1a;二级域名图片地址&#xff0c;这是相对路径。但是你的图片是默认上传在uploads里面的。应该使用绝对路径。这就出现图片路径错误…

java注册中心nacos_spring-cloud整合nacos做注册中心

前面讲了spring-cloud整合nacos做配置中心&#xff0c;这节讲一下nacos做注册中心至于注册中心是什么&#xff0c;我就不讲了&#xff0c;不了解的可以去问度娘下面我就直接开始了&#xff0c;也是比较简单的&#xff1a;1.引入依赖1.8Greenwich.SR12.1.0.RELEASEorg.springfra…

python批量转换图片格式_python批量将图片转换为JPEG格式

标签&#xff1a;# -*- coding:utf-8 -*-import osfrom PIL import Imagedef resize(path):filelist os.listdir(path)for i in filelist:img Image.open(path i)outfile os.path.splitext(i)[0] .jpegif img ! outfile:img.save("C:/Users/Administrator/Desktop/最…

判断 JS 中对象的类型

1.typeof 形如 var x "xx"; typeof x string typeof(x) 返回类型有&#xff1a;undefined “string” number boolean function object 缺点&#xff1a;对于object类型不能细分是什么类型 优点&#xff1a;对空null的判断 undefined的应用 2.instanceof 形如 var …

java中接口回调_Java中的接口回调实例

定义&#xff1a;/*** author Administrator* project&#xff1a; TestOne* package&#xff1a; PACKAGE_NAME* date&#xff1a; 2018/11/30 0030 15:42* brief: 郭宝**/public class Person {/*** 自定义一个接口**/public interface OnNameChangeListener{//接口中的抽象函…

python经纬度转换xy坐标公式_python 经纬度和平面坐标相互转换利用米勒坐标系

xy_coordinate [] # 转换后的XY坐标集def millerToXY (lon, lat):"""经纬度转换为平面坐标系中的x,y 利用米勒坐标系:param lon: 经度:param lat: 维度:return:"""L 6381372*math.pi*2W LH L/2mill 2.3x lon*math.pi/180y lat*math.pi/1…

Android基于mAppWidget实现手绘地图(二)--概要

离线地图是一张被切成类似瓷砖般格子图像组成&#xff0c;这些被切开的格子组织成多个缩放级别。缩放级别是从0开始。0这个缩放级别&#xff0c;地图图像的尺寸为1*1像素。在每下一个缩放级别&#xff0c;图像尺寸则会两倍递增。 每个地图都是有层和地图对象的。 层是一个抽象的…

java实体字节属性定义_Java字节码方法表与属性表详解

而这些字节其实对应的信息是它&#xff1a;所以问题就来了&#xff0c;aload_0不是助记符信息么&#xff0c;怎么就能够跟字节码文件中的字节对应上呢&#xff1f;所谓助记符其实也就是帮忙我们去记忆的符合&#xff0c;在底层其实也是对应的一个个十六进制的数字的&#xff0c…

允许使用抽象类类型 isearchboxinfo 的对象_此对象非彼对象(面向对象)3

java13面向对象深入3大纲这里没有写面向对象-封装性理解封装( encapsulation)怎么去理解&#xff0c;一台电脑利用一个外壳包裹&#xff0c;保护了里面的电器元件&#xff0c;提供了少量的按键与其对接使用。我要看电视&#xff0c;只需要按一下开关和换台就可以了。有必要了解…

python turtle库输出文字_python turtle库学习笔记

#绘制时钟#codingutf-8importturtle as ttfrom datetime import *#当前日期属于一周的第几天defWeek(t):week ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]returnweek[t.w…

后勤报修项目心得

耗时两天左右&#xff0c;完成了预期任务&#xff0c;来做个总结1.简单说下感受2.说说整个经历3.温习下自己在实战项目操作过程中出现的问题 1.因为之前有过一个礼拜左右时间上手预热项目&#xff0c;果然这样学就是上手快&#xff0c;比起在学校里的课&#xff0c;效率提升了很…