上图来自王老师的文章,现在借用一下。
从图中我们清晰看到了想要精通python有很多库要学习,有用在金融量化方面的,有用在数据分析方面,还有用在深度学习方面方面的等等,总的来说知识很庞大。我们最近一段时间一起学习的是numpy这个常用库,他和Scipy都常用于Array Operation当中。
下面进入今天的正题--numpy之数组知识梳理。
#今天对numpy数组再梳理一遍
import numpy as np #导入numpy包取名为np
#这样你就可以用 numpy 里面所有的内置方法 (build-in methods) 了,比如求和与均值。
np.sum()
np.mean()
#数组的创建
#数组 (array) 是相同类型的元素 (element) 的集合所组成数据结构 (data structure)。numpy 数组中的元素用的最多是「数值型」元素,平时我们说的一维、二维、三维数组长下面这个样子 (对应着线、面、体)。四维数组很难被可视化。
注意一个关键字 axis,中文叫「轴」,一个数组是多少维度就有多少根轴。由于 Python 计数都是从 0 开始的,那么
第 1 维度 = axis 0
第 2 维度 = axis 1
第 3 维度 = axis 2
但这些数组只可能在平面上打印出来,那么它们 (高于二维的数组) 的表现形式稍微有些不同。
效果看起来不是很好理解,先有个感观的认识,王老师这个图画的也十分的形象。
分析上图各个数组的在不同维度上的元素:
一维数组:轴 0 有 3 个元素
二维数组:轴 0 有 2 个元素,轴 1 有 3 个元素
三维数组:轴 0 有 2 个元素 (2 块),轴 1 有 2 个元素,轴 2 有 3 个元素
四维数组:轴 0 有 2 个元素 (2 块),轴 1 有 2 个元素 (2 块),轴 2 有 2 个元素,轴 3 有 3 个元素
#创建数组
带着上面这个对轴的认识,接下来我们用代码来创建 numpy 数组,有三种方式:
老老实实的 np.array() 用在列表和元组上
定隔定点的 np.arange() 和 np.linspace()
直接生成的 np.ones(), np.zeros(), np.eye() 和 np.random.random()
l=[4.5,3,4,8,5.2]
np.array(l)
#结果如下
array([4.5, 3. , 4. , 8. , 5.2])
t=(4.5,3,4,8,5.2)
np.array(l)
#结果如下
array([4.5, 3. , 4. , 8. , 5.2])
注意,numpy 数组的输出都带有 array() 的字样,里面的元素用「中括号 []」框住。
#定隔定点法
#很常见的两种创建numpy数组的方法:
#定隔的arrange:固定元素大小间隔
#定点的linspace:固定元素个数
#arange(start,stop,step)
print(np.arange(8))
print(np.arange(2,8))
print(np.arange(2,8,2))
结果如下:
[0 1 2 3 4 5 6 7]
[2 3 4 5 6 7]
[2 4 6]
#linspace(start,stop,num)
print(np.linspace(2,6,3))
print(np.linspace(3,8,11))
#结果如下
[2. 4. 6.]
[3. 3.5 4. 4.5 5. 5.5 6. 6.5 7. 7.5 8. ]
#下面看一下一次性填充的方法
#用 zeros() 创建全是 0 的 n 维数组
#用 ones() 创建全是 1 的 n 维数组
#用 random() 创建随机 n 维数组
#用 eye() 创建对角矩阵 (二维数组)
#里面的参数表示维度,也就是列,行,块的分布情况
#从后面往前面看,列,行,块
print(np.zeros(5))#此处写一个表示5列,1行,1块
print(np.ones((2,3)))
print(np.random.random((2,3,4)))
#效果如下
[0. 0. 0. 0. 0.]
[[1. 1. 1.]
[1. 1. 1.]]
[[[0.07079119 0.90606156 0.09099147 0.27062027]
[0.1233698 0.24627631 0.72349707 0.82177079]
[0.6325507 0.05897936 0.1508053 0.17777804]]
[[0.96053327 0.65330394 0.83672353 0.00751357]
[0.70237911 0.63728644 0.64834623 0.88798707]
[0.15671275 0.02923048 0.26724469 0.17507859]]]
#对于函数 eye(),它的参数就是一个标量,控制矩阵的行数或列数:
#默认K=0,表示1落在对角线上
np.eye(4)
#效果如下
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
#K=1,表示1落在对角线右上方
np.eye(4,k=1)
#效果如下
array([[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.],
[0., 0., 0., 0.]])
#K=-1,表示1落在对角线左下方
np.eye(4,k=-1)
#效果如下
array([[0., 0., 0., 0.],
[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.]])