Numpy入门——Python数据分析mooc笔记
来源:互联网 发布:灰盒测试知乎 编辑:程序博客网 时间:2024/05/29 04:28
数据
一个数据,表达一个含义
一组数据,表达一个或多个含义
列表和数组
列表:数据类型可以不同
数组:数据类型相同
Python已有列表类型,为什么需要一个数组对象(类型)?
- 数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据
- 设置专门的数组对象,经过优化,可以提升这类应用的运算速度
- 数组对象采用相同的数据类型,有助于节省运算和存储空间
比较Python内置列表类型和数组对象类型
计算
A2+B3 ,其中A和B是一维数组
Python内置列表类型
def pySum(): a = [0,1,2,3,4] b = [5,6,7,8,9] c = [] for i in range(len(a)): c.append(a[i]**2+b[i]**3) return cprint(pySum())
numpy数组
import numpy as npdef npSum(): a = np.array([0,1,2,3,4]) b = np.array([5,6,7,8,9]) c = a**2 + b**3 return cprint(npSum())
N维数组对象:ndarray
np.array()
生成一个ndarray数组,输出成[]
形式,元素由空格分隔
轴(axis): 保存数据的维度;秩(rank):轴的数量
In [1]: import numpy as npIn [2]: a = np.array([[0,1,2,3],[4,5,6,7]])In [3]: aOut[3]:array([[0, 1, 2, 3], [4, 5, 6, 7]])In [4]: a.ndimOut[4]: 2In [5]: a.shapeOut[5]: (2, 4)In [6]: a.sizeOut[6]: 8In [7]: a.dtypeOut[7]: dtype('int32')In [8]: a.itemsizeOut[8]: 4In [9]: b = np.array([[0,1,2,3,4],[5,6,7]])# ndarray数组可以由非同质对象构成In [10]: bOut[10]: array([[0, 1, 2, 3, 4], [5, 6, 7]], dtype=object)# 非同质ndarray元素为对象类型In [11]: b.ndimOut[11]: 1In [12]: b.shapeOut[12]: (2,)In [13]: b.sizeOut[13]: 2# 非同质ndarray对象无法有效发挥NumPy优势,尽量避免使用In [14]: b.dtypeOut[14]: dtype('O')In [15]: b.itemsizeOut[15]: 8
.ndim
秩,即轴的数量或维度的数量 .shape
ndarray对象的尺度,对于矩阵,n行m列 .size
ndarray对象元素的个数,相当于.shape中n*m的值 .dtype
ndarray对象的元素类型(bool,intc,intp,int8,int16,int32,int64) .itemsize
ndarray对象中每个元素的大小,以字节为单位ndarray数组的创建方法
- 从Python中的列表、元组等类型创建ndarray数组
x = np.array(list/tuple, dtype=np.float32)
当np.array()不指定dtype时,NumPy将根据数据情况关联一个dtype类型 使用NumPy中函数创建ndarray数组,如:arange, ones, zeros等
函数 说明 np.arange(n)
类似range()函数,返回ndarray类型,元素从0到n‐1np.ones(shape)
根据shape生成一个全1数组,shape是元组类型np.zeros(shape)
根据shape生成一个全0数组,shape是元组类型np.full(shape,val)
根据shape生成一个数组,每个元素值都是valnp.eye(n)
创建一个正方的n*n单位矩阵,对角线为1,其余为0np.ones_like(a)
根据数组a的形状生成一个全1数组np.zeros_like(a)
根据数组a的形状生成一个全0数组np.full_like(a,val)
根据数组a的形状生成一个数组,每个元素值都是val使用NumPy中其他函数创建ndarray数组
函数 说明 np.linspace()
根据起止数据等间距地填充数据,形成数组np.concatenate()
将两个或多个数组合并成一个新的数组In [2]: a = np.linspace(1,10,4)In [3]: aOut[3]: array([ 1., 4., 7., 10.])In [4]: b = np.linspace(1,10,4,endpoint=False)In [5]: bOut[5]: array([ 1. , 3.25, 5.5 , 7.75])pyIn [6]: c = np.concatenate((a,b))In [7]: cOut[7]: array([ 1. , 4. , 7. , 10. , 1. , 3.25, 5.5 , 7.75])
ndarray数组的变换
对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换
1. 维度变换
| 方法 | 说明 || -------------------- | ---------------------------- || `.reshape(shape)` | 不改变数组元素,返回一个shape形状的数组,原数组不变 || `.resize(shape)` | 与.reshape()功能一致,但修改原数组 || `.swapaxes(ax1,ax2)` | 将数组n个维度中两个维度进行调换 || `.flatten()` | 对数组进行降维,返回折叠后的一维数组,原数组不变 |```shellIn [8]: d = np.ones((2,3,4),dtype=np.int32)In [9]: d.reshape((3,8))Out[9]:array([[1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1]])In [10]: dOut[10]:array([[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]])In [11]: d.resize((3,8))In [12]: dOut[12]:array([[1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1]])In [13]: d.flatten()Out[13]:array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])In [14]: dOut[14]:array([[1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1]])```
类型变换
new_a = a.astype(new_type)
astype()方法一定会创建新的数组(原始数据的一个拷贝),即使两个类型一致In [2]: e = np.ones((2,3,4),dtype=np.int)In [3]: eOut[3]:array([[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]])In [4]: e.astype(np.float)Out[4]:array([[[ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.]], [[ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.]]])
数组向列表的转换
ls = a.tolist()
In [2]: a = np.full((2,3,4),25,dtype=np.int32)In [3]: aOut[3]:array([[[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]], [[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]]])In [4]: a.tolist()Out[4]:[[[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]],[[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]]]
ndarray数组的操作
索引:获取数组中特定元素位置的过程
切片:获取数组元素子集的过程
- 一维数组的索引和切片:与Python的列表类似
每个维度切片方法与一维数组相同
每个维度可以使用步长跳跃切片
```In [2]: a = np.array([9,8,7,6,5])In [3]: a[2]Out[3]: 7In [4]: a[1:4:2]Out[4]: array([8, 6])```
多维数组的切片
In [5]: b = np.arange(24).reshape((2,3,4))In [6]: bOut[6]:array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]])In [7]: b[1,2,3]Out[7]: 23In [8]: b[-1,-2,-3]Out[8]: 17
ndarray数组的运算
- 数组与标量之间的运算作用于数组的每一个元素
- NumPy一元函数
对ndarray中的数据执行元素级运算的函数
np.abs(x)
、np.fabs(x)
计算数组各元素的绝对值 np.sqrt(x)
计算数组各元素的平方根 np.square(x)
计算数组各元素的平方 np.log(x)
、 np.log10(x)
、np.log2(x)
计算数组各元素的自然对数、10底对数和2底对数 np.ceil(x)
、np.floor(x)
计算数组各元素的ceiling值 或 floor值 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(‐)- NumPy二元函数
| 函数 | 说明 || ---------------------------------------- | ---------------------- || `+`、`‐`、`*`、`/`、`**` | 两个数组各元素进行对应运算 || `np.maximum(x,y)`、`np.fmax()`<br>`np.minimum(x,y)`、`np.fmin()` | 元素级的最大值/最小值计算 || `np.mod(x,y)` | 元素级的模运算 || `np.copysign(x,y)` | 将数组y中各元素值的符号赋值给数组x对应元素 || `>`、`<`、`>=`、`<=`、`==`、`!=` | 算术比较,产生布尔型数组 |
0 0
- Numpy入门——Python数据分析mooc笔记
- Python数据分析之NumPy(Mooc学习笔记1,ndarray)
- Python数据分析笔记——Numpy、Pandas库
- 利用python进行数据分析学习笔记—Numpy基础知识
- python语法笔记——NumPy入门
- Python数据分析--Numpy部分笔记
- Python数据分析与展示(1)——NumPy库入门
- 《Python数据分析与展示》学习笔记(一)numpy入门
- Python数据分析包——NumPy(Numerical Python)
- python数据分析---Numpy
- python 数据分析-numpy
- Python数据分析基础(二)——NumPy基础
- Python数据分析常用手册——Numpy和Pandas
- 利用Python做数据分析——numpy基础
- Python数据分析利器——numpy简单教学
- python数据分析系列教程——NumPy全解
- 数据分析Numpy库入门
- python数据分析学习笔记-Numpy-Matplotlib-Pandas
- 二叉搜索树
- 基于 Django1.10 文档的深入学习(16)——Authentication backends 之 class ModelBackend
- linux内核空间内存管理基本架构
- utf-8中的汉字占多少个字节
- UVA11806: Composite Prime (容斥 & 组合数)
- Numpy入门——Python数据分析mooc笔记
- Unity3D手游开发日记(10)
- 集合类Stack的用法
- ubuntu 搭建 svn服务器,使用http方式访问
- 说说Servlet 生命周期、工作原理
- 设置自己的sleep函数
- 二叉树之用java语言实现
- 基于 Django1.10 文档的深入学习(17)——Customizing authentication 之 Custom users and permissions
- c++智能指针