所有创建数组的函数中,都有一个可选参数dtype
,表示创建的数组的数据类型。
指定维度 | empty , eye , identity , ones , zeros , full |
模仿维度 | empty_like , ones_like , zeros_like , full_like |
特殊矩阵 | diag , diagflat , tri , tril , triu , vander |
其中,empty
生成一个指定维度的空数组。
eye
和identity
都是生成对角为1,其他元素为0的矩阵,区别在于,identity
只能生成单位矩阵,即方阵;而eye
则可以生成行列数不同的矩阵。例如
>>> np.eye(2,3)
array([[1., 0., 0.],
[0., 1., 0.]])
>>> np.identity(2) # 只有一个输入
array([[1., 0.],
[0., 1.]])
ones
, zeros
和full
生成所有元素都相同的数组,顾名思义ones
和zeros
分别是全1和全0的数组,而full
则可以指定其fill_value
,例如
>>> np.ones(3)
array([1., 1., 1.])
>>> np.zeros([2,3]) #生成全0数组
array([[0., 0., 0.],
[0., 0., 0.]])
>>> np.full([2,4], 5) #生成元素均为5的数组
array([[5, 5, 5, 5],
[5, 5, 5, 5]])
以_like
为后缀的函数,表示生成一个和输入数组维度相同的数组,以ones
为例,np.ones_like(x)
等价于np.ones(x.shape)
。
>>> x = np.full([2,4],5)
>>> y = np.full_like(x, 6)
>>> print(x,y)
[[5 5 5 5]
[5 5 5 5]] [[6 6 6 6]
[6 6 6 6]]
>>> print(y)
[[6 6 6 6]
[6 6 6 6]]
diagflat
用于生成对角矩阵,diag
在diagflat
基础上,添加了提取对角元素的功能,例如
>>> np.diagflat([1,2,3])
array([[1, 0, 0],
[0, 2, 0],
[0, 0, 3]])
>>> np.diag([1,2,3])
array([[1, 0, 0],
[0, 2, 0],
[0, 0, 3]])
>>> np.diag(np.ones([3,3])) #提取对角元素
array([1., 1., 1.])
tri(M,N,k)
用于生成M行N列的三角阵,其元素为0或者1,k
用于调节0
和1
的分界线相对于对角线的位置,例如
>>> np.tri(3,5,1)
array([[1., 1., 0., 0., 0.],
[1., 1., 1., 0., 0.],
[1., 1., 1., 1., 0.]])
>>> np.tri(3,5,2)
array([[1., 1., 1., 0., 0.],
[1., 1., 1., 1., 0.],
[1., 1., 1., 1., 1.]])
>>> np.tri(3,5,3)
array([[1., 1., 1., 1., 0.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
tril, triu
可用于提取出矩阵的左下和右上的三角阵,其输入参数除了待提取矩阵之外,另一个参数与tri
中的k
相同。
x = np.arange(12).reshape(4,3)
>>> np.tril(x,-1)
array([[ 0, 0, 0],
[ 3, 0, 0],
[ 6, 7, 0],
[ 9, 10, 11]])
>>> np.triu(x,-1)
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 0, 7, 8],
[ 0, 0, 11]])
范德蒙德矩阵可表示为
[ 1 α 1 α 1 2 ⋯ α 1 n 1 α 2 α 2 2 ⋯ α 2 n ⋮ ⋮ ⋮ 2 ⋯ ⋮ n 1 α m α m 2 ⋯ α m n ] \begin{bmatrix} 1&\alpha_1&\alpha_1^2&\cdots&\alpha_1^n\\ 1&\alpha_2&\alpha_2^2&\cdots&\alpha_2^n\\ \vdots&\vdots&\vdots^2&\cdots&\vdots^n\\ 1&\alpha_m&\alpha_m^2&\cdots&\alpha_m^n \end{bmatrix} ⎣⎢⎢⎢⎡11⋮1α1α2⋮αmα12α22⋮2αm2⋯⋯⋯⋯α1nα2n⋮nαmn⎦⎥⎥⎥⎤
np.vander
可通过给定的 α i \alpha_i αi生成范德蒙德矩阵,例如
x = np.array([1, 2, 3, 5])
np.vander(x, increasing=True)
array([[ 1, 1, 1, 1],
[ 1, 2, 4, 8],
[ 1, 3, 9, 27],
[ 1, 5, 25, 125]])