所有创建数组的函数中,都有一个可选参数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
]
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]])