NumPy创建数组

0元素矩阵

np.zeros

np.zeros可以用来创建以0为元素的矩阵,它的语法如下,

np.zeros(shape, dtype=float, order='C')

其中shape就是所要生成的矩阵的尺寸,可以为一维,二维和多维。数据类型默认为float64,当然你可以指定具体的其他数据类型。

我们来创建几个零元素矩阵

>>> import numpy as np
>>> np.zeros(5)		# 生成一个元素为5个0的一维矩阵
array([0., 0., 0., 0., 0.])
>>> np.zeros(5, dtype='int8')	#生成一个元素为5个0的一维矩阵,数据类型为int8
array([0, 0, 0, 0, 0], dtype=int8)
>>> np.zeros((4, 3)) # 生成一个4行3列的零矩阵
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])

np.empty

有些情况下,你只是想初始化一个矩阵为指定尺寸的矩阵,对里面的初始化数据并不关心,那你可以使用np.empty来实现更快的初始化,但要注意的一点时,它并不保证里面的数据为0。

我们可以通过%timeit来具体比较下np.empty()np.zeros()的执行时间,

In [1]: %timeit np.empty((100, 100))
    715 ns ± 11.6 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [2]: %timeit np.zeros((100, 100))
    4.03 µs ± 104 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

很明显的,np.empty()在初始化的时候要比np.zeros()快得多,在矩阵尺寸为(100, 100)的测试条件下,它只需要大约17.5%的时间。

np.zeros_like

假如有些情况下,我们已经有一个矩阵,我们想生成一个跟它具有相同尺寸的零矩阵,我们可以用传统的方法来创建,

test = np.array([[1,2,3],[4,5,6],[7,8,9]])
np.zeros(test.shape)

或者我们可以用NumPy的另外一个函数np.zeros_like()直接来生成,效率更高。

x = np.zeros_like(test)
注意
np.zeros_like()的形状跟输入矩阵一样,而且数据类型也是一样的。

1元素矩阵

np.ones

同理,我们也可以快速生成元素全为1的矩阵,np.ones()的用法和输入参数跟np.zeros()的完全一致。

>>> import numpy as np
>>> np.ones(5)		# 生成一个元素为5个1的一维矩阵
array([1., 1., 1., 1., 1.])
>>> np.ones(5, dtype='int8')	#生成一个元素为5个1的一维矩阵,数据类型为int8
array([1, 1, 1, 1, 1], dtype=int8)
>>> np.ones((4, 3)) # 生成一个4行3列的元素为1的矩阵
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])

np.ones_like

np.zeros_like一样,np.ones_like可以用来更高效的生成与输入矩阵具有相同形状的元素为1的矩阵。

>>> test = np.array([[1.0,2.0,3.0],[4.0,5.0,6.0],[7.0,8.0,9.0]])
>>> np.ones_like(test)
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])

对角矩阵

对角矩阵是对角线上元素为1,其他位置元素为0的矩阵。可以通过np.eye()函数来生成此类型矩阵,它的语法如下

np.eye(N, M=None, k=0, dtype=<class 'float'>, order='C')

其中,

参数名称 数据类型 摘要
N INT 指定生成的矩阵的行数。
M INT (可选)缺省值为None。 指定要生成的矩阵的列数。当它为None时,它变为与N相同的值。
k INT (可选)缺省值为0。 0为主对角线位置,如果k的值为正,则1元素向上平移k次,如果k为负,则1元素向下平移k次,
dtype 数据类型 (可选)缺省值为float 指定生成的数组的元素的数据类型。

np.eye()举例

>>> import numpy as np
>>> np.eye(3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
>>> np.eye(4, 3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.],
       [0., 0., 0.]])
>>> np.eye(3, 4)
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.]])
>>> np.eye(4, k=1)
array([[0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.],
       [0., 0., 0., 0.]])

np.identity()

np.identity可以被看成是一种特殊的np.eye,它用来生成的矩阵是一个方阵,也就是行列数相等的矩阵。语法如下,

numpy.identity(n, dtype = float)
参数名称 数据类型 说明
n INT 指定要生成的矩阵的大小。生成N×N方阵。
dtype 数据类型 (可选)缺省值为float。 指定元素的数据类型。

np.identity()举例

>>> import numpy as np
>>> np.identity(3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

三角矩阵

可以通过np.tri()来生成三角矩阵,函数调用语法如下,

numpy.tri(N, M=None, k=0, dtype=<class 'float'>)

其输入参数跟np.eye()类似,可以作为参考。

np.tri()举例

>>> import numpy as np
>>> np.tri(3)
array([[1., 0., 0.],
       [1., 1., 0.],
       [1., 1., 1.]])
>>> np.tri(4, k=1)
array([[1., 1., 0., 0.],
       [1., 1., 1., 0.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])