热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python中numpy优势是什么

这篇文章将为大家详细讲解有关Python中numpy优势是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.Numpy

这篇文章将为大家详细讲解有关Python中numpy优势是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

1.Numpy的优势

Python已经提供了很多丰富的内置包,我们为什么还要学习NumPy呢?先看一个例子,找寻学习 NumPy 的必要性和重要性。如下:

Python中numpy优势是什么

完成同样的都对元素相加的操作,NumPy比Python快了11倍之多。这就是我们要学好NumPy的一个重要理由,它在处理更大数据量时,处理效率明显快于Python。并且内置的向量化运算和广播机制,使得使用NumPy更加简洁,会少写很多嵌套的for循环,因此代码的可读性大大增强。NumPy计算为什么这么快呢?原因如下:

1)Python 的 list是一个通用结构。它能包括任意类型的对象,并且是动态类型。

2)NumPy 的 ndarray 是 静态、同质 的类型,当ndarray对象被创建时,元素的类型就确定。由于是静态类型,所以ndarray间的加、减、乘、除用 C 和 Fortran 实现才成为可能,所以运行起来就会更快。根据官方介绍,底层代码用 C语言 和 Fortran 语言实现,实现性能无限接近 C 的处理效率。

3)支持并行化运算,也叫向量化运算。当然向量是数学当中的概念,我们不过多解释,只需要知道他的优势即可。也就是说 NumPy 底层使用 BLAS 做向量,矩阵运算。

numpy的许多函数不仅是用C实现了,还使用了BLAS(一般Windows下link到MKL的,下link到OpenBLAS)

基本上那些BLAS实现在每种操作上都进行了高度优化

例如使用AVX向量指令集,甚至能比你自己用C实现快上许多,更不要说和用Python实现的比

由此可见,NumPy 就非常适合做大规模的数值计算和数据分析。

2. 数组属性

数组属性反映了数组本身固有的信息。

属性名字 属性解释

ndarray.shape 数组维度的元组

ndarray.flags 有关阵列内存布局的信息

ndarray.ndim 数组维数

ndarray.size 数组中的元素数量

ndarray.itemsize 一个数组元素的长度(字节)

ndarray.nbytes 数组元素消耗的总字节数

示例代码如下:

import numpy as np
# 数组的属性
# 1.创建数组 这里先不用管 后续会详细讲解数组的创建方法
a = np.array([[1,2,3],[4,5,6]])
b = np.array([1,2,3,4])
c = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])
# 创建数组的时候指定类型
# dtype更多取值: int complex bool object
# 还可以显示的定义数据位数的类型,如: int64、int16、float128、complex128。
d = np.array([1,2,3,4], dtype=np.float)
# 2.测试数组属性
print(a.shape)  # 数组形状  (2, 3): 二维数组
print(b.shape)  # (4,) 一维数组: 有4个元素
print(c.shape)  # (2, 2, 3): 三维数组
print(a.ndim)  # 数组维数 2
print(a.size)  # 元素的数量 6 
print(a.itemsize)  # 每一个元素占的位数(字节) 8
print(a.nbytes)  # 总共占的字节数 6*8 ==> 48
print(a.flags)  # 阵列内存布局
print(a.dtype)  # 数组类型 int64
print(d.dtype)  # float64

上述代码执行结果如下:

Python中numpy优势是什么

3. 创建数组

1) 创建0和1的数组 示例代码如下:

Python中numpy优势是什么

2)从现有的数据中创建 示例代码如下:

num_list = [[1,2,3], [4,5,6]]
a = np.array(num_list)
a1 = np.array(a)  # 创建了一个新的数组
a2 = np.asarray(a)  # 还是引用原来的数组
print(a)
print(a1)
print(a2)
a[0] = 10
a, a1, a2

上述代码执行结果如下:

Python中numpy优势是什么

3)创建固定范围的数组,语法格式如下:

np.linspace(start, stop, num, endpoint, retstep, dtype) 生成等间隔的序列

start:序列的起始值

stop:序列的终止值

num:要生成的等间隔样例数量,默认为50

endpoint:序列中是否包含stop值,默认为True

retstep:如果为True,返回样例,以及连续数字之间的步长

dtype:输出ndarray的数据类型

示例代码如下:

arr = np.linspace(0, 10, 10)
arr

执行结果如图所示:

Python中numpy优势是什么

其它的还有:

1)numpy.arange(start,stop, step, dtype) 

示例代码如下:

np.arange(1, 10, 2)

运行结果如图所示:

Python中numpy优势是什么

2)numpy.logspace(start,stop, num, endpoint, base, dtype) 构造一个从10的-2次方 到 10的2次方 的等比数列,这个等比数列的长度是 10 个元素,示例代码如下:

np.logspace(-2,2,10)

运行结果如图所示:

Python中numpy优势是什么

如果不想是10的次方,也就是想改变基数,那么可以这么写,代码如下:

np.logspace(-2,2,10,base=2)

运行结果如图所示:

Python中numpy优势是什么

4. 创建随机数组

np.random 模块生成随机数组,更加方便,示例代码如下:

Python中numpy优势是什么

上面产生的数据是属于一个均匀分布。那么什么是均匀分布呢?在概率论和统计学中,均匀分布也叫矩形分布,它是对称概率分布,在相同长度间隔的分布概率是等可能的。 均匀分布由两个参数a和b定义,它们是数轴上的最小值和最大值,通常缩写为U(a,b)。

正态分布?给定均值/标准差/维度的正态分布,示例代码如下:

Python中numpy优势是什么

正态分布是一种概率分布。正态分布是具有两个参数μ和σ的连续型随机变量的分布,第一参数μ是服从正态分布的随机变量的均值,第二个参数σ是此随机变量的方差,所以正态分布记作N(μ,σ )。

Python中numpy优势是什么

生活、生产与科学实验中很多随机变量的概率分布都可以近似地用正态分布来描述。μ决定了其位置,其标准差σ。决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。

Python中numpy优势是什么

标准差如何来?方差是在概率论和统计方差衡量一组数据时离散程度的度量。

Python中numpy优势是什么

其中M为平均值,n为数据总个数,s为标准差,s^2可以理解一个整体为方差。

Python中numpy优势是什么

通过索引切片等获取数组中的值,一维数组示例代码如下:

Python中numpy优势是什么

二维数组示例代码如下:

Python中numpy优势是什么

三维数组示例代码如下:

Python中numpy优势是什么

5. 数组形状与类型变化

1)ndarray.reshape(shape[, order]) Returns an array containing the same data with a new shape. 示例代码如下:

Python中numpy优势是什么

2)ndarray.resize(new_shape[, refcheck]) Change shape and size of array in-place. 示例代码如下:

Python中numpy优势是什么

3)修改类型 ndarray.astype(type) 示例代码如下:

Python中numpy优势是什么

4)修改小数位数 ndarray.round(arr, out) Return a with each element rounded to the given number of decimals. 示例代码如下:

Python中numpy优势是什么

5)ndarray.flatten([order]) Return a copy of the array collapsed into one dimension. 示例代码如下:

Python中numpy优势是什么

6)ndarray.T 数组的转置 将数组的行、列进行互换 示例代码如下:

Python中numpy优势是什么

7) ndarray.tostring([order])或者ndarray.tobytes([order]) Construct Python bytes containing the raw data bytes in the array. 转换成bytes

Python中numpy优势是什么

8)ndarray.copy([order]) Return a copy of the array. 当我们不想修改某个数据的时候,就可以去进行拷贝操作。在拷贝的数据上进行操作,示例代码如下:

Python中numpy优势是什么 

关于Python中numpy优势是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


推荐阅读
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 判断数组是否全为0_连续子数组的最大和的解题思路及代码方法一_动态规划
    本文介绍了判断数组是否全为0以及求解连续子数组的最大和的解题思路及代码方法一,即动态规划。通过动态规划的方法,可以找出连续子数组的最大和,具体思路是尽量选择正数的部分,遇到负数则不选择进去,遇到正数则保留并继续考察。本文给出了状态定义和状态转移方程,并提供了具体的代码实现。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
author-avatar
咪咪的小天地计_395
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有