Toggle navigation
Mr.Strawberry's House
文章
网址导航
更多
甜品站
杂物间
新版博客
关于 快刀切草莓君
友情链接
妙妙屋开发日志
注册
登录
搜索
文章列表
分类 标签
归档
# Numpy 总结 近期我开始学习数据分析基础库,涉及到 Numpy, Matplotlib, Pandas 等数据分析常用库,本文为 Numpy 的知识总结。参考材料:[Numpy官方文档](https://numpy.org/doc/stable/), [ Python 知识手册](http://liyangbit.com/) [TOC] ## 创建数组 - 核心:**多维数组 ndarray**,包含数据本身以及描述数据的元数据。 **优势**:数据由相同类型元素组成,向量化运算。 - 引入:`import numpy as np` ### 方法1 `np.array` 由 `list`, `tuple` 等可迭代类型生成 ``` a = np.array([1,2,3]) # list 一维 da = np.array([[1,2,3], [4,5,6], [7,8,9]]) arr1 = np.arange(24).reshape(2,3,4) #arange长度与ndarray维度乘积相同 ``` tip: 多维数组维度 可以数`[`的个数 ### 方法2 使用函数创建特殊数组 - `np.arange()` 类似range,前包含后不包含。 ``` np.arange(16) np.arange(1,100,3) arr2 = np.array([np.arange(3), np.arange(3)]) #[[0,1,2], [0,1,2]] nparange返回一个array 两个array组成一个二维的数组 ``` - `np.ones`, `np.ones_like` - `np.zeros`, `np.zeros_like` ``` >>> np.zeros((2, 10)) # 传入的参数是一个元组 array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]) >>> np.zeros_like(da) array([[0, 0, 0], [0, 0, 0], [0, 0, 0]]) ``` - `np.empty`, `np.empty_like` - `np.eye` 创建一个对角为1,其余为0的数组。参数k决定对角线的位置。 - `np.identity` - `np.diag` 创建对角线为指定元素的数组 - `np.linspace` 返回指定间隔内的等间隔数字 包含结束数字 `np.linspace(1, 40, 4)` - `np.logspace` 返回对数的尺度均匀分布 ``` >>> np.logspace(2, 3, num=4) # 10^2和10^3中间 对数尺度上均匀分布 array([ 100. , 215.443469 , 464.15888336, 1000. ]) ``` ## 数组特点 ### 元素类型 ![a3514e39c6a9ddccd82e04ed46423060.png](en-resource://database/2423:1) (图:Numpy的数值类型) - 指定数值类型 `np.arange(5, dtype=float16)` ``` arr = np.arange(6).reshape(2,3) # [[0, 1, 2], [3, 4, 5]] arr.T # [[0, 3], [1, 4], [2, 5]] ``` - 复数数组的 `real`, `imag`属性 返回数组的实和虚部 - `flat`: 返回一个可迭代的`numpy.flatiter`对象 ``` arr = np.arange(6).reshape(2,3) f = arr.flat for item in f: print(item) #位置索引 arr.flat[2] #2 #赋值 arr.flat = 7 # [7,7,7],[7,7,7] arr.flat[[1, 4]] = 1 # 第1 和第4个元素为1 ``` tip:flat就相当于把数组拉平后进行操作 ### 属性和轴 **数组属性** - `dtype`:数据类型 `astype`修改类型,并返回新的数组 - `ndim`:数组的维度数量 - `shape`:数组对象的尺寸 `reshape`修改尺寸返回新的数组 - `size`:保存的元素的数量 - `itemsize`:各个元素所占用的字节数大小 - `nbytes`:整个数组所需的字节数 `nbytes = size * itemsize` **维度和轴** - 一维数组:与list类似 ``` a = np.arange(7) a[1:4] a[:6:2] ``` - 多维数组:0轴,1轴 ... 括号由外向内的顺序 ``` b = np.arrange(12).reshape(3,4) #[[0,1,2,3], [4,5,6,7], [8,9,10,11]] ``` - 轴数:从外向内一层一轴 ![ac3b06f9c826776f771bc8bb18e778ea.png](en-resource://database/2425:1) **形状处理** - `arr.resize()` 改变 **原数组**的形状 - `arr.reshape()` 返回一个新的改变形状的数组 - `ravel()` 多维数组转换成一维数组 是一份视图view 对其的操作会影响原矩阵 - `flatten()` 多维数组转换成一维数组 返回一份拷贝 ``` a = np.arange(6) a.flatten()[2] = 100 # a变为 ``` - 用tuple指定数组形状 `b.shape=(2,3)` - 装置 T or `transpose()` ## 数组的切片和索引 ### 索引的不同方法 数组的索引/下标可以是整数、列表、数组 ### 数组切片方法 `b[0:3, 0:2] #[[0,1], [4,5], [8,9]]` ## 操作数组 ### 变形 - `np.reshape`, `ndarray.reshape` - `ndarray.shape` - `ndarray.flatten()`, `ndarray.ravel` ### 组合 ### 分割
文章信息
标题:Numpy 总结
作者:快刀切草莓君
分类:程序设计语言
发布时间:2020年6月7日
最近编辑:2020年6月21日
浏览量:1297
↑