python numpy包基础(1) - 数组

参考: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)
>>> arr1
array([1, 2, 3])

>>> data2=[[1,2,3],[4,5,6]]  #嵌套序列
>>> arr2=np.array(data2)
>>> arr2
array([[1, 2, 3],
       [4, 5, 6]])

>>> arr3=np.array(arr2)
>>> arr3
array([[1, 2, 3],
       [4, 5, 6]])

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

>>>arr4=np.array([(1,2,3),(4,5)])
>>> arr4
array([(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.ndim
2
  • .shape:尺寸
>>> arr2.shape
(2, 3)
  • .dtype:数据类型
>>> arr2.dtype
dtype('int64')

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

类型类型代码说明
int8、uint8i1、u1有符号和无符号的8位(1个字节)整型
int16、uint16i2、u2有符号和无符号的16位(2个字节)整型
int32、uint32i4、u4有符号和无符号的32位(4个字节)整型
int64、uint64i8、u8有符号和无符号的64位(8个字节)整型
float16f2半精度浮点数
float32f4或f标准的单精度浮点数。与C的float兼容
float64f8或d标准的双精度浮点数。与C的double和Python的float对象兼容
float128f16或g扩展精度浮点数
complex64c8分别用两个64位浮点数标识的复数,其他位数同理
bool?存储True和False值的布尔类型
objectOPython对象类型
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*3
array([[ 3,  6,  9],
       [12, 15, 18]])

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值