python数据分析与展示 – 第一周/单元一/NumPy库入门

English Version: https://today2tmr.com/en/2017/08/16/python-data-unit-one/

数据的维度

  • 一组数据的组织形式,表达特定关系
  • 一维数据 -> 对等关系 -> 列表/数组/集合等
    • 列表和数组:一组数据的有序结构
      • 列表: 数据类型可以不同
      • 数组: 数据类型相同
  • 二维数据 -> 一维数据的组合形式
    • 多维列表
  • 多维数据 -> 一维或二维数据在新维度上扩展(如时间)
    • 多维列表
  • 高维数据 -> 仅利用最基本的二元关系展示数据间的复杂结构 -> 用键值对组织(如Json)
    • 字典或数据表示格式(Json/XML/YAML)

NumPy的数组对象:ndarray

  • NumPy: 开源Python科学计算基础库
    • N维数组对象 ndarray
    • 广播功能函数:用于数组间计算
    • 整合C/C++/Fortran代码的工具
    • 线性代数、傅里叶变换、随机数生成等功能
  • NumPy是SciPy、Pandas等库的基础

  • NumPy的引用 import numpy as np
  • 例:计算 A2 + B3,其中,A和B是一维数组

 

 

  • 去除元素间运算所需的循环,使一维向量更像单个数据
  • 设置专门数组对象可提升运算速度(底层实现用C完成)
  • 科学计算中,一个维度的数据类型往往相同
  • 采用数组对象,采用相同数据类型利于节省内存空间

  • 多维数组对象
    • 实际数据
    • 描述数据的元数据(维度、类型)
  • 一般要求所有元素类型相同,数组下标从0开始

 

  • 打印时元素间用空格分离
  • 轴axis 数据维度
  • 秩rank 轴的数量

ndarray对象的属性

属性 说明
.ndim 秩,即维度数量
.shape 尺度,对于矩阵,n行m列
.size 元素个数,n * m
.dtype 元素类型
.itemsize 每个元素的大小,以字节为单位

 

元素类型

数据类型 说明
bool 1/0
intc 与C中的int一致,int32或int64
intp 用于索引的整数,与C中ssize_t一致,int32或int64
int8 字节长度的整数,[-128, 127]
int16 16位整数
int32 32位整数
int64 64位整数
uint8 8位无符号整数,[0, 255]
uint16 16位无符号整数
uint32 32位无符号整数
uint64 64位无符号整数
float16 16位半精度浮点数
float32 32位半精度浮点数
float64 64位半精度浮点数
complex64 复数类型,实部虚部都是32位浮点数(.real+.imag)
complex128 复数类型,实部虚部都是64位浮点数
  • python仅支持整数、浮点数和复数三种

 

  • 对于非同质元素: 将一个元素视为一个对象O,object

 

ndarray数组的创建和变换

创建方法

  • 从python中的列表、元组等类型创建ndarray数组。
    • x = np.array(list/tuple)
    • x = np.array(list/tuple, dtype=np.float32)
    • 无指定dtype时,由numpy自动确认类型

     

    • 列表元组数据个数相同时可混合使用
  • 使用NumPy中函数创建ndarray数组,如:arrange, ones, zeros等。
函数 说明
np.arange(n) 类似range(),返回ndarray类型,元素从0到n-1
np.ones(shape) 根据shape生成全1数组,shape为元组
np.zeros(shape) 根据shape生成全0数组,shape为元组
np.full(shape, val) 根据shape生成一个数组,每个元素值都是val
np.eye(n) 创建n*n矩阵,对角线为1,其余为0
np.ones_like(a) 根据数组a的形状生成全1数组
np.zeros_like(a) 根据数组a的形状生成全0数组
np.full_like(a, val) 根据数组a的形状生成元素全为val的数组
np.linspace(start, end, ele_num, endpoint=True) 根据起止数据等间距地填充数组,endpoint设置是否以end为最末值
np.concatenate() 将两个或多个数组合并成一个新的数组
 

 

  • 从字节流(raw bytes)中创建ndarray数组。
  • 从文件中读取特定格式,创建ndarray数组。

变换方法

  • 维度变换和类型变换
    • reshape(), resize()需保证个数不变
    • 注意是否改变原数组
    • np.int可由程序自动调节
    • astype()可用于拷贝数组
方法 说明
.reshape(shape) 不改变数组元素,返回shape形状的数组,原数组不变
.resize(shape) 与.reshape()功能一致,但修改原数组
.swapaxes(ax1, ax2) 将数组n个维度中的2个维度进行调换
.flatten() 对数组进行降维,返回折叠后的一维数组,原数组不变
.astype(new_type) 改变元素类型为new_type,创建新数组
.tolist() 生成列表

 

ndarray数组的操作

  • 数组的索引和切片
    • 索引 获取特定位置元素
    • 切片 获取数组子集

一维数组

  • 索引:与python列表类似
  • 切片:[arg1 : arg2 : arg3]
    • arg1: 起始位置
    • arg2: 终止位置(不含)
    • arg3: 步长

多维数组

  • ::step 步长跳跃切片
  • : 选取某个维度所有元素

 

ndarray数组的运算

数组与标量之间的运算

  • 等价于数组中的每一个元素与标量运算
  • .mean()获得算术平均值

 

一元函数

函数(部分) 说明
np.abs(x) np.fabs(x) 计算数组各元素的绝对值
np.sqrt(x) 计算数组各元素平方根
np.square(x) 计算数组各元素平方
np.log(x) 计算数组各元素自然对数
np.log10(x) 计算数组各元素10底对数
np.log2(x) 计算数组各元素2底对数
np.ceil(x) 各元素向下取整
np.floor(x) 各元素向上取整
np.rint(x) 各元素四舍五入
np.modf(x) 将数组各元素小数部分和整数部分以两个独立数组形式返回
np.cos(x) np.cosh(x) np.sin(x) np.sinh(x) np.tan(x) np.tanh(x) 计算数组各元素的普通型和双曲型三角函数
np.exp(x) 计算数组各元素的指数值
np.sign(x) 计算数组各元素符号值,1/0/-1

 

二元函数

函数 说明
+ – / * 两个数组对应元素进行运算
np.maximum(x,y) np.fmax() 取对应位置元素的最大值
np.minimum(x,y) np.fmin() 取对应位置元素的最小值
np.mod(x,y) 元素级的模运算
np.copysign(x,y) 将数组y中各元素的符号赋值给数组x对应元素
> < >= <= != 对应元素算术比较,产生布尔型数组
  • maximum若数据类型不同,如整数和浮点数,将生成浮点数类型数组

 

单元小结

  • 维度
  • ndarray类型属性、创建和变换
  • 数组的索引和切片
  • 数组的一元、二元运算

Leave a Reply

Your email address will not be published.