关于数据分析:Python数据分析-Numpy与1维数组操作

82次阅读

共计 2912 个字符,预计需要花费 8 分钟才能阅读完成。

作者:韩信子 @ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/33
本文地址:http://www.showmeai.tech/article-detail/142
申明:版权所有,转载请分割平台与作者并注明出处


n 维数组是 NumPy 的外围概念,大部分数据的操作都是基于 n 维数组实现的。本系列内容笼罩到 1 维数组操作、2 维数组操作、3 维数组操作方法,本篇解说 Numpy 与 1 维数组操作。

一、向量初始化

能够通过 Python 列表创立 NumPy 数组。

如图中(a),将列表元素转化为一维数组。留神,这里个别会确保列表元素类型雷同,否则默认dtype=’object',会影响后续运算,甚至产生语法错误。

因为在数组开端没有预留空间以疾速增加新元素,NumPy 数组无奈像 Python 列表那样增长。因而,通常的解决形式包含:

  • 在变长 Python 列表中筹备好数据,而后将其转换为 NumPy 数组
  • 应用 np.zerosnp.empty 事后调配必要的空间(图中 b)

通过图中(c)办法,能够创立一个与某一变量形态统一的空数组。

不止是空数组,通过上述办法还能够将数组填充为特定值:

在 NumPy 中,还能够通过枯燥序列初始化数组:

如果咱们须要浮点数组,能够应用 arange(3).astype(float) 这样的操作更改 arange 输入的类型,也能够在参数端应用浮点数,比方 arange(4.) 来生产浮点数 Numpy 数组。
以下是 arange 浮点类型数据可能呈现的一些问题及解决方案:

图中,0.1 对咱们来说是一个无限的十进制数,但对计算机而言,它是一个二进制无穷小数,必须四舍五入为一个近似值。因而,将小数作为 arange 的步长可能导致一些谬误。能够通过以下两种形式防止如上谬误:

  • 使距离开端落入非整数步数,但这会升高可读性和可维护性;
  • 应用 linspace,这样能够防止四舍五入的谬误影响,并始终生成要求数量的元素。

    • 应用 linspace 时尤其须要留神最初一个的数量参数设置,因为它计算点数量,而不是距离数量,因而上图中数量参数是 11,而不是 10。

随机数组的生成办法如下:

二、向量索引

NumPy 能够应用十分间接的形式对数组数据进行拜访:

图中,除“fancy indexing”外,其余所有索引办法实质上都是 views:它们并不存储数据,如果原数组在被索引后产生更改,则会反映出原始数组中的更改。

上述所有这些办法都能够扭转原始数组,即容许通过调配新值扭转原数组的内容。这导致无奈通过切片来复制数组。如下是 python 列表和 NumPy 数组的比照:

NumPy 数组反对通过布尔索引获取数据,联合各种逻辑运算符能够有很高级的数据抉择形式,这在 Python 列表中是不具备的:

留神,不能够应用 3 <= a <= 5 这样的 Python“三元”比拟。

如上所述,布尔索引是可写的。如下图 np.wherenp.clip 两个专有函数。

三、向量操作

NumPy 反对疾速计算,向量运算操作靠近 C ++ 速度级别,并不受 Python 循环自身计算慢的限度。NumPy 容许像一般数字一样操作整个数组:

在 python 中,a// b 示意 a div b(除法的商),x** n 示意 xⁿ

浮点数的计算也是如此,NumPy 可能将标量播送到数组:

Numpy 提供了许多数学函数来解决矢量:

向量点乘(内积)和叉乘(外积、向量积)如下:

NumPy 也提供了如下三角函数运算:

数组整体进行四舍五入:

floor 向上取整,ceil 向下取整,round 四舍五入

np.aroundnp.round 是等效的,这样做只是为了防止 from numpy import * 时与 Python around 的抵触(但个别的应用形式是 import numpy as np)。当然,你也能够应用 a.round()。

NumPy 还能够实现以下性能:

以上性能都存在相应的 nan-resistant 变体:例如 nansumnanmax

在 NumPy 中,排序函数性能有所阉割:

对于一维数组,能够通过反转后果来解决 reversed 函数缺失的有余,但在 2 维数组中该问题变得辣手。

四、查找向量中的元素

NumPy 数组并没有 Python 列表中的索引办法,索引数据的比照如下:

index()中的方括号示意 j 或 i&j 能够省略

  • 能够通过 np.where(a==x)[0] [0]查找元素,但这种办法很不 pythonic,哪怕须要查找的项在数组结尾,该办法也须要遍历整个数组。
  • 应用 Numba 实现减速查找,next((i[0] for i, v in np.ndenumerate(a) if v==x), -1),在最坏的状况下,它的速度要比 where 慢。
  • 如果数组是排好序的,应用 v = np.searchsorted(a, x); return v if a[v]==x else -1 工夫复杂度为O(log N),但在这之前,排序的工夫复杂度为 O(N log N)。

实际上,通过 C 实现减速搜寻并不是艰难,问题是浮点数据比拟。

五、浮点数比拟

np.allclose(a, b)用于容忍误差之内的浮点数比拟。

  • np.allclose假设所有比拟数字的尺度为 1。如果在纳秒级别上,则须要将默认 atol 参数除以 1e9:np.allclose(1e-9,2e-9, atol=1e-17)==False
  • math.isclose不对要比拟的数字做任何假如,而是须要用户提供一个正当的 abs\_tol 值(np.allclose默认的 atol 值 1e- 8 足以满足小数位数为 1 的浮点数比拟,即math.isclose(0.1+0.2–0.3, abs_tol=1e-8)==True

此外,对于绝队偏差和相对偏差,np.allclose 仍然存在一些问题。例如,对于某些值 a、b,allclose(a,b)!=allclose(b,a),而在 math.isclose 中则不存在这些问题。查看 GitHub 上的浮点数据指南和相应的 NumPy 问题理解更多信息。

材料与代码下载

本教程系列的代码能够在 ShowMeAI 对应的 github 中下载,可本地 python 环境运行,能迷信上网的宝宝也能够间接借助 google colab 一键运行与交互操作学习哦!

本系列教程波及的速查表能够在以下地址下载获取:

  • NumPy 速查表
  • Pandas 速查表
  • Matplotlib 速查表
  • Seaborn 速查表

拓展参考资料

  • NumPy 教程
  • Python NumPy 教程

ShowMeAI 相干文章举荐

  • 数据分析介绍
  • 数据分析思维
  • 数据分析的数学根底
  • 业务认知与数据初探
  • 数据荡涤与预处理
  • 业务剖析与数据挖掘
  • 数据分析工具地图
  • 统计与数据科学计算工具库 Numpy 介绍
  • Numpy 与 1 维数组操作
  • Numpy 与 2 维数组操作
  • Numpy 与高维数组操作
  • 数据分析工具库 Pandas 介绍
  • 图解 Pandas 外围操作函数大全
  • 图解 Pandas 数据变换高级函数
  • Pandas 数据分组与操作
  • 数据可视化准则与办法
  • 基于 Pandas 的数据可视化
  • seaborn 工具与数据可视化

ShowMeAI 系列教程举荐

  • 图解 Python 编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解 AI 数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程

正文完
 0