Python(一):Numpy基础知识

2025-04-21 15:46:49

1、NumPy入门详解什么是NumPy?NumPy是Python中一个用于科学计算的包,提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。NumPy基础Numpy的主要对象是同种元素的多维数组。一个数组中的所有元素都是同一种类型,通过正整数元组索引的元素表格(通常元素是数字)。在Numpy中dimensions-纬度叫做axes-轴,轴的个数叫做rank-秩(zhì)。例如,下面的例子中,这个数组的秩为2(它是二维的)。它的第一纬度(轴)长度为2,第二纬度的长度为3。[[1,1.,1],[2,2,2]]Numpy提供的最重要数据类型有:1.float64 64位浮点数2.float32 32位浮点数3.int64 64位整数4.int32 32位整数5.bool 8位 True 或者 False(查询当前多维数组可以用Python内嵌的type()函数)转换数据类型可以通过ndarray的astype方法显式地转换其dtype。arr = np.array([1,2,3])print(arr.dtype)float_arr = arr.astype(np.float32)print(float_arr.dtype)(一类数据在位数切换时只能表示近似的分数值,在复杂计算中,由于可能会积累一些浮点错误,因此比较操作只能在一定小数位以内有效。)Numpy的基本对象:ndarray&func标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3],需要有3个指针和三个整数对象。对于数值运算来说这种结构显然比较浪费内存和CPU计算时间。此外Python还提供了一个array模块,array对象和列表不同,它直接保存数值,和C语言的一维数组比较类似。但是由于它不支持多维,也没有各种运算函数,因此也不适合做数值运算。NumPy的诞生弥补了这些不足,NumPy提供了两种基本的对象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray(下文统一称之为数组)是存储单一数据类型的多维数组,而ufunc是一种能对数组的每个元素进行操作的函数。NumPy内置的许多ufunc函数都是在C语言级别实现的,因此它们的计算速度非常快。常用ndarray属性:dtype 描述数组元素的类型shape 以tuple表示的数组形状ndim 数组的维度size 数组中元素的个数itemsize 数组中的元素在内存所占字节数T 数组的转置flat 返回一个数组的迭代器,对flat赋值将导致整个数组的元素被覆盖real/imag 给出复数数组的实部/虚部nbytes 数组占用的存储空间常用ndarray方法:reshape(…) 返回一个给定shape的数组的副本resize(…) 返回给定shape的数组,原数组shape发生改变flatten()/ravel() 返回展平数组,原数组不改变astype(dtype) 返回指定元素类型的数组副本fill() 将数组元素全部设定为一个标量值sum/Prod() 计算所有数组元素的和/积mean()/var()/std() 返回数组元素的均值/方差/标准差max()/min()/ptp()/median() 返回数组元素的最大值/最小值/取值范围/中位数argmax()/argmin() 返回最大值/最小值的索引sort() 对数组进行排序,axis指定排序的轴;kind指定排序算法,默认是快速排序view()/copy() view创造一个新的数组对象指向同一数据;copy是深复制tolist() 将数组完全转为列表,注意与直接使用list(array)的区别compress() 返回满足条件的元素构成的数组多维数组ndarray内存结构:如下图所示,关于数组的描述信息保存在一个数据结构中,这个结构引用两个对象:一块用于保存数据的存储区域和一个用于描述元素类型的dtype对象。(图一)NumPy数组高效原因:NumPy数组基本上是由元数据(维数、形状、数据类型等)和实际数据构成。数据存储在一个均匀连续的内存块中,该内存在系统内存(随机存取存储器,或RAM)的一个特定地址处,被称为数据缓冲区。这是和list等纯Python结构的主要区别,list的元素在系统内存中是分散存储的。这是使NumPy数组如此高效的决定性因素。在内存中数据占用的空间:一个空的 numpy 数组,无论什么类型,都是占用 96 个字节(byte)。一个 32位的数据类型(int32/float32) 都是占用 4 个字节,而64位的都占用 8 个字节。多维数组的创建函数(图二)

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢