Python三方库之numpy
numpy库的安装: window下命令行直接输入pip install numpy 导入numpy库:import numpy 或者 import numpy as np numpy与list: 相同之处: 都可以用下标访问元素,如a[3]. 都可以切片访问,如a[1:3] 都可以使用for循环进行遍历 不同之处 numpy之中的每个元素类型必须相同,而list可以混合多个类型元素 numpy使用更方便,封装了许多函数,例如:mean,std,sum,min等 numpy可以是多维数组。numpy用c实现,操作起来速度更快
numpy数据类型:
1 ndarray对象 numPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型。它描述相同类型的元素集合。 可以使用基于零的索引访问集合中的项目。ndarray类的实例可以通过本教程后面描述的不同的数组创建例程来构造。基本的ndarray是使用 numPy 中的数组函数创建的 我们可以通过给array函数传递Python的序列对象创建数组,如果传递的是多层嵌套的序列,将创建的多维数组。numpy.array(object,dtype = None, copy = True, order = None, subok = False, ndmin = 0) 参数描述:
例子如下: 1.1数组属性 numpy.shape数组的大小可以通过属性shape获得。在保持数组元素个数不变的情况下可以改变数组每个轴的长度。 当某个轴的元素为-1时,将根据数组元素的个数自动计算此轴的长度。使用数组的reshape方法,可以创建一个改变了尺寸的新数组,原数组的shape将保持不变。(注意:这两个数组其实共享存储区域,因此修改任意一个数组元素的内容都会修改另外一个数组的内容)。 numpy.dtype 数组元素类型可以通过dtype属获得,可以通过dtype参数在创建的时候指定元素类型。 numpy.itemsize返回数组中每个元素的字节单位长度:
运行结果为:4 2 数组创建 numpy.empty创建指定形状和dtype未初始化的数组,使用以下构造函数:numpy.empty(shape,dtype = float, order = 'C') :参数列表如下: 例子如下: 注意:数组元素为随机值,因为他们未初始化。numpy.zeros返回特定大小,以0填充的新数组:numpy.zeros(shape,dtype = float, order = 'C')例子如下: numpy.ones返回特定大小,以1填充的新数组: 3用已有数据创建数组 numpy.asarray类似于numpy.array。基本用法和array类似。与array的区别如下: 由图可见:对于元数据:二者没有区别,都是对元数据复制并转换为ndarray。
由图可见:当数据源是ndarry时,array会copy出一个副本,占用新的内存,但是asarry不会。 numpy.frombuffer 此函数将缓冲区解释为一维数组。暴露缓冲区接口的任何对象都用作参数来返回ndarray numpy.frombuffer(buffer,dtype = float, count = -1, offset = 0)
numpy.fromiter 此函数从任何可迭代对象构建一个ndarray对象,返回一个新的一维数组。 4来自数值范围的数组 numpy.arangenumpy.arange(start,stop, step, dtype)类似于python中的range函数,通过起始值,终值和步长来创建一维数组(数组不包括终值) numpy.linspace 同过指定初始值,终值,和元素个数来创建一维数组,通过endpoint关键字指定是否包含终值,缺省设置是包含终值。numpy.linspace(start,stop, num, endpoint, retstep, dtype) numpy.logspace 此函数返回一个ndarray对象,其中包含在对数刻度上均匀分布的数字,刻度的开始和结束端点都是某个底数的幂。通常为10num.logspace(start,stop,num,endpoint,base,dtype) 5切片和索引 ndarray对象中的元素遵循基于零的索引。 有三种可用的索引方法类型: 字段访问,基本切片和高级索引 字段访问: 和python列表序列不同,通过下标范围获取的新的数组是原始数组的一个视图,他与原始数组共享一块数据空间。如:
切片索引: 切片索引通过将start、stop、和step参数提供给内置的slice函数来构建一个Python slice对象,此slice对象被传递给数组提取来提取数组的一部分。
除了用下标索引和切片索引外,numpy还提供了两中高级索引方法
当使用整数序列对数组元素进行存取时,将使用序列中的每个元素作为下标,整数序列可以是列表或者数组,使用整数序列作为下标活得的数组不和原始数组共享数据空间。 使用布尔数组 当使用布尔数组b作为下表存取数组x中的元素时,将收集数组x中所有在数组b中对应下标为True的元素。使用布尔数组作为下标获得的数组不和原始数组共享数据空间,这种方式对应于布尔数组,不对应于列表。
下图输出大于5的数字 广播 广播是指在numpy在算术运算期间处理不同形状的数组的能力,对数组的运算通常是在元素上进行,如果两个阵列具有完全相同的形状,则这些操作将被无缝执行。 如果两个数组的维数不相同,则元素到元素的操作是不可能的。 然而,在 NumPy 中仍然可以对形状不相似的数组进行操作,因为它拥有广播功能。较小的数组会广播到较大数组的大小,以便使它们的形状可兼容 ndim较小的数组会在前面追加一个长度为 1 的维度。 输出数组的每个维度的大小是输入数组该维度大小的最大值。 如果输入在每个维度中的大小与输出大小匹配,或其值正好为 1 如果输入的某个维度大小为1,则该维度中的第一个数据元素将用于该维度的所有计算。 6数组上的迭代 numpy包含一个迭代器对象numpy.nditer,它是一个有效的多维迭代器对象,可以用于在数组上的迭代,数组的每个元素可以使用Python的标准接口访问 迭代的顺序匹配数组的内容布局,而不是考虑特定的排序。 广播迭代 如果两个数组是可广播的,nditer组合能够同时迭代他们。实例如下: 翻转操作 numpy.transpose 格式如下: numpy.transpose(arr, axes) arr:表示要转置的矩阵,axes:整数的列表,对应维度,通常所有的维度都会翻转 numpy.adarry.T(效果与transpose类似) numpy.rollaxis 该函数向后滚动特定的轴,直到一个特定的位置,这个函数接受3个参数。numpy.rollaxis(arr, axis, start) arr:输入数组 axis:要向后滚动的轴,其他轴的相对位置不变 start:默认为0,表示完整的滚动,会滚到特定的位置 7数组连接 numpy concatenate此函数用于指定轴连接相同形状的两个或多个数组 numpy.concatenate((a1, a2, ...),axis) a1,a2…相同类型的数组 numpy.stack此函数沿新轴连接数组numpy.stack(arrays, axis) arrays:相同形状的数组序列 axis:返回数组中的轴,输入数组沿着它来堆叠 axis:沿着它连接的数组的轴,默认为0算数函数三角函数 numpy拥有标准的三角函数,它为弧度制单位的给定角度返回三角函数比例 arcsin 和 arccos和arctan函数返回给定角度的sin,cos和tan的反三角函数,这些结果可以通过numpy.degree()函数来将弧度制转换为角度制。(以下以arcsin为例) 8统计函数 numpy.amin 和numpy.amax 这些函数表示从给定数组中的元素,沿指定轴返回最小值和最大值 |