sschencn 2020-04-21
Numpy是高性能科学计算和数据分析的基础包。它也是pandas等其他数据分析的工具的基础,基本所有的数据分析的包都用过它。Numpy为python带来了真正的多维数组功能,并且提供了丰富的函数库处理这些数组。它将常用的数学函数都支持向量化运算,使得这些数学函数能够直接对数组进行操作,将本来需要在python级别进行的循环,放到C语言的运算中,明显地提高了程序的运算速度。
安装
pip install numpy
使用
import numpy as np
简单的例子
# 都是运行在jupyter notebook 上import numpy as np def squares(values): result = [] for v in values: result.append(v*v) return result to_square = range(10000) %timeit squares(to_square)>>> 5.71 ms ± 133 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
array_to_square = np.arange(0, 10000) %timeit array_to_square**2>>> 42.9 µs ± 6.17 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
numpy的核心特征就是N-维数组对------ndarray 的特点
ndarray基础
np.array()
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生成三行四列的一个多维数组 ------------------------------------------------------------------------ 5、empty() np.empty(10) 执行结果: array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]) # 这个方法只申请内存,不给它赋值 ----------------------------------------------------------------------- 6、eye() np.eye(5) 执行结果: array([[1., 0., 0., 0., 0.], [0., 1., 0., 0., 0.], [0., 0., 1., 0., 0.], [0., 0., 0., 1., 0.], [0., 0., 0., 0., 1.]])
# 将一维数组变成二维数组 arr = np.arange(30).reshape(5,6) # 后面的参数6可以改为-1,相当于占位符,系统可以自动帮忙算几列 arr # 将二维变一维 arr.reshape(30) # 索引使用方法 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], [24, 25, 26, 27, 28, 29]]) 现在有这样一组数据,需求:找到20 列表写法:arr[3][2] 数组写法:arr[3,2] # 中间通过逗号隔开就可以了
arr数组 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], [24, 25, 26, 27, 28, 29]]) arr[1:4,1:4] # 切片方式 前面的1:4是从第一行开始到第四行;后面的1:4就是从第一列开始到第四列 执行结果: array([[ 7, 8, 9], [13, 14, 15], [19, 20, 21]])
数组和数字之间的运算
li1 = [ [1,2,3], [4,5,6] ] a = np.array(li1) a * 2 运行结果: array([[ 2, 4, 6], [ 8, 10, 12]])
同样大小数组之间的运算
# l2数组 l2 = [ [1,2,3], [4,5,6] ] a = np.array(l2) # l3数组 l3 = [ [7,8,9], [10,11,12] ] b = np.array(l3) a + b # 计算 执行结果: array([[ 8, 10, 12], [14, 16, 18]])
arr = np.arange(30).reshape(5,6) arr
arr > 5 array([[False, False, False, False, False, False], [ True, True, True, True, True, True], [ True, True, True, True, True, True], [ True, True, True, True, True, True], [ True, True, True, True, True, True]])# 布尔值索引:将同样大小的布尔数组传进索引,会返回一个有True对应位置的元素的数组
能对数组中所有元素同时进行运算的函数就是通用函数。
常见的通用函数:能够接受一个数组的叫一元函数,接受两个数组的叫二元函数,结果返回的也是一个数组
注意
axis=0是x轴
axis=1是y轴
什么是数组数组是一种线性表数据结构,它用一组连续的内存空间来存储一组具有相同类型的数据。典型的线性表有数组、链表、队列和栈。直接将第 k 位的数据搬移到数组元素最后,然后把新的元素直接放在第 k 位。