【python】numpy创建特殊数组

文章目录

    • 简介
    • 生成指定维度的数组
    • 模仿某个数组的维度生成数组
    • 创建特殊矩阵
    • 范德蒙德矩阵

简介

所有创建数组的函数中,都有一个可选参数dtype,表示创建的数组的数据类型。

指定维度 empty, eye, identity, ones, zeros, full
模仿维度 empty_like, ones_like, zeros_like, full_like
特殊矩阵 diag, diagflat, tri, tril, triu, vander

生成指定维度的数组

其中,empty生成一个指定维度的空数组。

eyeidentity都是生成对角为1,其他元素为0的矩阵,区别在于,identity只能生成单位矩阵,即方阵;而eye则可以生成行列数不同的矩阵。例如

>>> np.eye(2,3)
array([[1., 0., 0.],
       [0., 1., 0.]])
>>> np.identity(2)  # 只有一个输入
array([[1., 0.],
       [0., 1.]])

ones, zerosfull生成所有元素都相同的数组,顾名思义oneszeros分别是全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用于生成对角矩阵,diagdiagflat基础上,添加了提取对角元素的功能,例如

>>> 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用于调节01的分界线相对于对角线的位置,例如

>>> 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} 111α1α2αmα12α222αm2α1nα2nnα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]])

你可能感兴趣的:(#,Numpy,numpy,python,开发语言,创建数组)