多语言展示
当前在线:1344今日阅读:155今日分享:35

Python(一):Numpy基础知识

Numpy基础知识
方法/步骤

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 个字节。多维数组的创建函数 (图二)

推荐信息