python numpy包基础(1)

来源:互联网 发布:如何查网络摄像头 编辑:程序博客网 时间:2024/06/05 18:57

参考:Wes McKinney 《Python for Dtaa Analysis》

介绍

NumPy(Numerical Python的简称),是高性能科学计算和数据分析的基础包。其部分功能如下:

  • ndarray,一个具有矢量算术运算和复杂广播能力的快速且省空间的多维数组
  • 用于对整组数据进行快速运算的标准科学函数(类似于R无需编写循环)
  • 用于读写磁盘数据的工具以及用于操作内存映射文件的工具
  • 线性代数、随机数生成以及傅里叶变换功能
  • 用于集成由C、C++等语言编写的代码的工具

最后一点也是从生态系统角度来看最重要的一点。由于NumPy提供了一个简单易用的C API,因此很容易将数据传递给低级语言编写的外部库,外部库也能以NumPY数组的形式将数据返回给Python。

数组

1.安装和导入

pip install numpy/NumPy  #控制台安装
import numpy as np  #导入必须小写,且最好遵守np的惯例

2.ndarray使用

NumPy最重要的一个特点就是其N维度=数组对象,即ndarray,该对象是一个快速而灵活的大数据容器。
ndarray是一个通用的同构数据多维容器,也就是说其中的所有元素必须是相同类型

2.1创建数组(ndarray)
创建数组最简单的方法是使用array(data)函数,传入的参数是一切序列型的对象(包括其他数组),然后产生一个含有传入数据的ndarray。

>>> data1=[1,2,3]  >>> arr1=np.array(data1)>>> arr1array([1, 2, 3])>>> data2=[[1,2,3],[4,5,6]]  #嵌套序列>>> arr2=np.array(data2)>>> arr2array([[1, 2, 3],       [4, 5, 6]])>>> arr3=np.array(arr2)>>> arr3array([[1, 2, 3],       [4, 5, 6]])

嵌套序列(如几个等长的列表)将会被转化为一个多维数组,当然即使是不等长的也可以

>>>arr4=np.array([(1,2,3),(4,5)])>>> arr4array([(1, 2, 3), (4, 5)], dtype=object)

除此之外,还有一些常用的创建ndarray数组的方式:

  • asarray
    将输入转化为ndarray,如果输入本身就是一个ndarray就不开辟内存复制,而是指向该地址所指的ndarray对象
  • arange
    类似于内置的arange,但返回的是一个ndarray而不是列表
  • ones、ones_like
    根据指定的形状和dtype创建一个全1数组。ones_like以另一个数组为参数,并根据其形状和dtype创建一个全1数组
  • zeros、zeros_like
    类似ones、onse_like,只不过产生的是全0数组
  • empty、empty_like
    创建新数组,只分配内存空间但不填充任何数值
  • eye、identity
    创建一个N × N单位矩阵(对角线为1,其余为0)

需要说明的是,empty函数返回的并非全0而是数组,其内都是一些没有意义未初始化的值,请切记。但是empty是最快的创建数组的方式,这一点需要注意。

2.2ndarray的数据类型
ndarray有一些常用的属性,如:

  • .ndim:维度
>>>arr2=array([[1, 2, 3],              [4, 5, 6]])>>> arr2.ndim2
  • .shape:尺寸
>>> arr2.shape(2, 3)
  • .dtype:数据类型
>>> arr2.dtypedtype('int64')

注意到有一个属性:dtype,这是ndarray用于存储数据类型的对象。
除非显式说明,np.array会尝试为新建的这个数组推断出一个合适的数据类型,如上面的例子。
具体而言,NumPy的数据类型如下:

类型 类型代码 说明 int8、uint8 i1、u1 有符号和无符号的8位(1个字节)整型 int16、uint16 i2、u2 有符号和无符号的16位(2个字节)整型 int32、uint32 i4、u4 有符号和无符号的32位(4个字节)整型 int64、uint64 i8、u8 有符号和无符号的64位(8个字节)整型 float16 f2 半精度浮点数 float32 f4或f 标准的单精度浮点数。与C的float兼容 float64 f8或d 标准的双精度浮点数。与C的double和Python的float对象兼容 float128 f16或g 扩展精度浮点数 complex64 c8 分别用两个64位浮点数标识的复数,其他位数同理 bool ? 存储True和False值的布尔类型 object O Python对象类型 string_ S_ 固定长度的字符串类型(每个字符一个字节),如S10 unicode_ U_ 固定长度的unicode类型(字节数由平台决定),如U10

dtype=可以+np.类型/’类型代码’/’类型’
如果你确实很懒或者吧不确定数据的确切类型,你也可以直接填入python中的已有数据类型,如dtype=float。ndarray会自动匹配最接近的数据类型。

对于已有的ndarray数组你可以通过astype函数显式的转换其dtype,如

arr=np.array([1,2,3])arr=arr.astype(float)arr

2.3ndarray与标量之间的运算
数组和重要,因为他可以使你不用编写循环就可以对数据进行批量处理,这通常叫做矢量化(vectorization),这点上python与R还是十分相似的。
数组与标量的运算会传播至数组的每个元素

>>>arr1=np.array([[1,2,3],               [4,5,6]])>>>arr1*3array([[ 3,  6,  9],       [12, 15, 18]])

大小相等的数组会在对应元素间进行运算

>>>arr2=np.arry([[1,2,3],              [4,5,6]])>>>arr2-arr1array([[0, 0, 0],       [0, 0, 0]])

不同大小的数组间的运算叫做广播,这在之后的博文中再做介绍。

原创粉丝点击