首先推荐Numpy官方的教程,网址。
很多人会对数组创建函数的参数中什么时候要用括号np.zeros((2, 3))
,什么时候不用括号np.eye(3, 5)
感到疑惑,这里对它们统一进行梳理。(按照官方文档的分类方法)
1. 一维数组创建函数
最常用的是np.arange()
和np.linspace()
:
两者都有开始start和结束stop,区别是arange有步长step而linspace有数目num。
实践上,遇到整数时使用np.arange()
,遇到浮点数时由于np.arange()
会由于舍入误差使得右端取值不确定(左闭右开或左闭右闭),所以会使用np.linspace()
。
2. 二维数组创建函数
二维数组创建函数,常用的是三个:单位矩阵np.eye()
、对角矩阵np.diag()
和三角矩阵np.tri()
>>> np.eye(3)
array([[1., 0., 0.],[0., 1., 0.],[0., 0., 1.]])
>>> np.eye(3, 5)
array([[1., 0., 0., 0., 0.],[0., 1., 0., 0., 0.],[0., 0., 1., 0., 0.]])>>> np.diag([1, 2, 3])
array([[1, 0, 0],[0, 2, 0],[0, 0, 3]])
>>> np.diag([1, 2, 3], 1)
array([[0, 1, 0, 0],[0, 0, 2, 0],[0, 0, 0, 3],[0, 0, 0, 0]])
>>> a = np.array([[1, 2], [3, 4]])
>>> np.diag(a)
array([1, 4])>>> np.tri(3, 5, 2, dtype=int)
array([[1, 1, 1, 0, 0],[1, 1, 1, 1, 0],[1, 1, 1, 1, 1]])
注意np.eye()
在指定行和列时是不需要加括号的,详细看下文。
3. 一般 ndarray 创建函数
常用的有:全0数组np.zeros()
、全1数组np.ones()
、空数组np.empty()
、填充数组np.full()
。每种函数都有对应的_like函数,传入某个数组就可以参考数组的shape进行构建。创建一维数组的例子如下:
注意生成的一维数组的shape是(3, ),在矩阵乘法中相当于行向量(1, 3),但是不能像行向量那样进行转置。
创建二维数组的例子如下:
留意到只有np.eye()
是不加括号的,其他的都要加括号。这是因为np.zeros()
、np.ones()
等传入的第一个参数是shape,而第二个参数是dtype,如果不加括号则会把第一个逗号后的数字误认为是dtype;np.eye()
的第二个参数则不是dtype,而是可选的M,所以第一个逗号后的数字是M。
最后是用随机数创建数组,建议用新的写法,因为更快: