机器学习之python入门指南(十一)numpy常用方法简介

                                                                                        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

数组创建

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

这些函数表示从给定数组中的元素,沿指定轴返回最小值和最大值

猜你喜欢

转载自blog.csdn.net/dlhlSC/article/details/83868002
今日推荐