小编写这篇文章的主要目的,主要是给大家进行介绍,关于NumPy与Python内置列表计算标准差区别的相关介绍,希望可以给各位读者带来帮助。
1什么是Numpy
NumPy,是NumericalPython的通称,用以性能卓越计算机的应用和数据统计分析的前提包,像数理科学专用工具(pandas)和架构(Scikit-learn)中都采用上了NumPy这个包。
NumPy中的基本数据结构是ndarray或者N维数值数组,在形式上来说,它的结构有点像Python的基础类型——Python列表。
但本质上,这两者并不同,可以看到一个简单的对比。
我们创建两个列表,当我们创建好了之后,可以使用+运算符进行连接:
list1=[i for i in range(1,11)] list2=[i**2 for i in range(1,11)] print(list1+list2) #[1,2,3,4,5,6,7,8,9,10,1,4,9,16,25,36,49,64,81,100]
列表中元素的处理感觉像对象,不是很数字,不是吗?如果这些是数字向量而不是简单的数字列表,您会期望+运算符的行为略有不同,并将第一个列表中的数字按元素添加到第二个列表中的相应数字中。
接下来看一下Nympy的数组版本:
import numpy as np arr1=np.array(list1) arr2=np.array(list2) arr1+arr2 #array([2,6,12,20,30,42,56,72,90,110])
通过numpy的np.array数组方法实现了两个列表内的逐个值进行相加。
我们通过dir函数来看两者的区别,先看Python内置列表list1的内置方法:
再用同样的方法看一下arr1中的方法:
NumPy数组对象还有更多可用的函数和属性。特别要注意诸如mean、std和sum之类的方法,因为它们清楚地表明重点关注使用这种数组对象的数值/统计计算。而且这些操作也很快。
2 NumPy数组和Python内置计算对比
NumPy的速率要快得多,是因为它的矢量化完成及其他的许许多多核心内容方法是最早用C语言(根据CPython框架结构)撰写的。NumPy字符数组是相同架构类别的密集排列的字符数组。比较之下,Python文件列表是偏向主体的数组指针,即便这些都是属于同一个类别。
因而,大家获得了参考资料局部性性的好处。
许许多多NumPy实际操作需要用C语言达到的,防止了Python当中的循环系统、表针间接地和逐设计元素动态类型检查的项目一般来说生产成本。
尤其是,速率的提升取决于您正在执行的操作。对于数据科学和ML任务,这是一个无价的优势,因为它防止了长和多维数组当中的循环系统。
让我们使用timing计时装饰器来说明这一点。这是一个围绕两个函数std_dev和std_dev_python包装装饰器的代码,分别使用NumPy和本机Python代码实现文件列表/字符数组的标准差计算。
3函数计算时间装饰器
我们可以使用Python装饰器和functools模块的wrapping来写一个时间装饰器timing:
def timing(func): wraps(func) def wrap(*args,**kw): begin_time=time() result=func(*args,**kw) end_time=time() print(f"Function'{func.__name__}'took{end_time-begin_time}seconds to run") return result return wrap
4标准差计算公式
然后利用这个时间装饰器来看Numpy数组和Python内置的列表,然后计算他们的标准差,
公式如图:
定义Numpy计算标准差的函数std_dev(),numpy模块中内置了标准差公式的函数a.std(),我们可以直接调用
列表计算公式方法需要按照公式一步一步计算:
先求求出宗和s
然后求出平均值average
计算每个数值与平均值的差的平方,再求和sumsq
再求出sumsq的平均值sumsq_average
得到最终的标准差结果result
代码如下:
from functools import wraps from time import time import numpy as np from math import sqrt def timing(func): wraps(func) def wrap(*args,**kw): begin_time=time() result=func(*args,**kw) end_time=time() #print(f"Function'{func.__name__}'with arguments{args},keywords{kw}took{end_time-begin_time}seconds to run") print(f"Function'{func.__name__}'took{end_time-begin_time}seconds to run") return result return wrap timing def std_dev(a): if isinstance(a,list): a=np.array(a) s=a.std() return s timing def std_dev_python(lst): length=len(lst) s=sum(lst) average=s/length sumsq=0 for i in lst: sumsq+=(i-average)**2 sumsq_average=sumsq/length result=sqrt(sumsq_average) return result
运行结果,最终可以看到1000000个值得标准差的值为288675.13459,而Numpy计算时间为0.0080 s,而Python原生计算方式为0.2499 s:
由此可见,Numpy的方式明显更快。
NumPy是专门针对数组的操作和运算进行了设计,所以数组的存储效率和输入输出性能远优于Python中的嵌套列表,数组越大,NumPy的优势就越明显。
到此为止,小编给大家介绍的这篇文章,就为大家介绍到这里了,希望可以为各位读者带来帮助。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/127778.html
小编写这篇文章的目的,主要是给大家来做一个比较详细的解答,解答一下其具体的相关知识,还有一些相关的代码解析,下面就给大家进行一个比较详细的解答。 什么是Numpy NumPy,是Numerical Python的简称,用于性能比较高的基础分析数据包,可以对其进行用来进行数据分析,像数学科学工具(pandas)和框架(Scikit-learn)中都使用到了NumPy这个包。 NumPy中的...
摘要:下文统一称为数组是存储单一数据类型的多维数组同语言数组直接保存数值而则是能够对数组进行处理的函数。动态数据类型与的数组和的这些不可变数据类型的适用场景等可变数据类型适用于需要不断对原始数据进行修改的场景。 showImg(https://segmentfault.com/img/remote/1460000018925396);Numpy,是python中的一个矩阵计算包,功能类似ma...
摘要:概述在中存在着通用函数和聚合去对数据进行处理通过向量进行对数据数组的计算而这些向量主要依靠一些通用函数而聚合是对面对大量数据时获取描述性统计信息的方法。三角函数提供了大量好用的通用函数,其中对于数据科学家最有用的就是三角函数。 showImg(https://segmentfault.com/img/remote/1460000018925263); 概述 在Numpy中存在着通用函数...
摘要:一前言权重法是一种比熵权法和标准离差法更好的客观赋权法它是基于评价指标的对比强度和指标之间的冲突性来综合衡量指标的客观权重。对比强度是指同一个指标各个评价方案之间取值差距的大小,以标准差的形式来表现。 ...
摘要:科学计算与数据可视化程序设计模块最重要的一个特点就是其维数组对象即该对象是一个快速而灵活的大数据集容器。两行及以上为二维表示数组各维度大小的元组。 科学计算与数据可视化1 @(程序设计) numpy模块 Numpy最重要的一个特点就是其N维数组对象(即ndarray)该对象是一个快速而灵活的大数据集容器。 使用Numpy,开发人员可以执行以下操作: 1、数组的算数和逻辑运算。 2、...
阅读 909·2023-01-14 11:38
阅读 876·2023-01-14 11:04
阅读 739·2023-01-14 10:48
阅读 1979·2023-01-14 10:34
阅读 941·2023-01-14 10:24
阅读 818·2023-01-14 10:18
阅读 498·2023-01-14 10:09
阅读 571·2023-01-14 10:02