1、什么是Numpy
NumPy是一个功能强大的Python库,主要用于对多维数组执行计算。NumPy这个词来源于两个单词-- Numerical和Python。
它是 Python 生态系统中数据分析、机器学习和科学计算的主力军。它极大地简化了向量和矩阵的操作处理。Python 数据科学相关的一些主要软件包(如 scikit-learn、SciPy、pandas 和 tensorflow)都以 NumPy 作为其架构的基础部分。除了能对数值数据进行切片(slice)和切块(dice)之外,使用 NumPy 还能为处理和调试上述库中的高级实例带来极大便利组。它将常用的数学函数都支持向量化运算,使得这些数学函数能够直接对数组进行操作,将本来需要在Python级别进行的循环,放到C语言的运算中,明显地提高了程序的运算速度。
2、为什么要用Numpy
NumPy是Python中的一个运算速度非常快的一个数学库,它非常重视数组。它允许你在Python中进行向量和矩阵计算,并且由于许多底层函数实际上是用C编写的,因此你可以体验在原生Python中永远无法体验到的速度。
import numpy as np
import time
# 用python自带方法处理
def func(values):
result = []
for v in values:
result.append(v * v)
return result
data = range(10000)
%timeit func(data)
运行结果:
1.07 ms ± 20.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
# 用numpy中的方法处理
arr = np.arange(0,10000)
%timeit arr ** arr
运行结果:
397 µs ± 32.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
NumPy绝对是科学Python成功的关键之一,如果你想要进入Python中的数据科学或机器学习,你就要必须学习它。从最后的执行结果来看numpy的处理速度要比python的处理速度快上十几倍,当然这只是它的其中一项优势,下面就通过一些具体的操作来看一看numpy的用法与优势。
3、怎么用Numpy
安装方法:
pip install numpy
引用方式:
import numpy as np
这是官方认证的导入方式,可能会有人说为什么不用from numpy import *,是因为在numpy当中有一些方法与Python中自带的一些方法,例如max、min等冲突,为了避免这些麻烦大家就约定俗成的都使用这种方法。
Numpy的核心特征就是N-维数组对——ndarray.
3.1、为什么要用ndarray?
numpy所有的操作都是围绕着数组展开的,这个数组的名字就叫做ndarray,在学习ndarray数组之前肯定有人会说这个东西和Python中的列表差不多啊,为什么不用列表呢,列表还要方便些。其实列表list本身是为了处理更广泛、更通用的目的而构建的,其实从这一方面来看ndarray对于处理这个数组类型结构的数据会更加方便。
接下来我们可以通过具体的实例来展示一下ndarray的优势。
现在有这样一个需求:
已知若干家跨国公司的市值(美元),将其换算为人民币
按照Python当中的方法
第一种:是将所有的美元通过for循环依次迭代出来,然后用每个公司的市值乘以汇率
第二种:通过map方法和lambda函数映射
这些方法相对来说也挺好用的,但是再来看通过ndarray对象是如何计算的
通过ndarray这个多维数组对象可以让这些批量计算变得更加简单,当然这只它其中一种优势,接下来就通过具体的操作来发现。
3.2、ndarray-创建
方法
描述
array()
将列表转换为数组,可选择显式指定dtype
arange()
range的numpy版,支持浮点数
linspace()
类似arange(),第三个参数为数组长度
zeros()
根据指定形状和dtype创建全0数组
ones()
根据指定形状和dtype创建全1数组
empty()
根据指定形状和dtype创建空数组(随机值)
eye()
根据指定边长和dtype创建单位矩阵
1、arange():
np.arange(1.2,10,0.4)
执行结果:
array([1.2, 1.6, 2. , 2.4, 2.8, 3.2, 3.6, 4. , 4.4, 4.8, 5.2, 5.6, 6. ,
6.4, 6.8, 7.2, 7.6, 8. , 8.4, 8.8, 9.2, 9.6])
# 在进行数据分析的时候通常我们遇到小数的机会远远大于遇到整数的机会,这个方法与Python内置的range的使用方法一样
-----------------------------------------------------------------
2、linspace()
np.linspace(1,10,20)
执行结果:
array([ 1. , 1.47368421, 1.94736842, 2.42105263, 2.89473684,
3.36842105, 3.84210526, 4.31578947, 4.78947368, 5.26315789,
5.73684211, 6.21052632, 6.68421053, 7.15789474, 7.63157895,
8.10526316, 8.57894737, 9.05263158, 9.52631579, 10. ])
# 这个方法与arange有一些区别,arange是顾头不顾尾,而这个方法是顾头又顾尾,在1到10之间生成的二十个数每个数字之间的距离相等的,前后两个数做减法肯定相等
----------------------------------------------------------------
3、zeros()
np.zeros((3,4))
执行结果:
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
# 会用0生成三行四列的一个多维数组
---------------------------------------------------------------------
4、ones()
np.ones((3,4))
执行结果:
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
# 会用1生成三行四列的一个多维数组
-