NumPy 矩阵库(Matrix) - NUMPY教程

NumPy 矩阵库(Matrix)

NumPy 中包含了一个矩阵库 numpy.matlib ,该模块中的函数返回的是一个矩阵,而不是 ndarray 对象。

numpy.matlib 专门用于创建和操作 矩阵(matrix) 对象。虽然 NumPy 的核心支持多维数组(ndarray),numpy.matlib 提供了一些方便的函数,专门返回矩阵类型,便于用户进行传统的线性代数运算。

一个 的矩阵是一个由 行(row) 列(column)元素排列成的矩形阵列。

矩阵里的元素可以是数字、符号或数学式。以下是一个由 6 个数字元素构成的 2 行 3 列的矩阵:

转置矩阵

NumPy 中除了可以使用 numpy.transpose 函数来对换数组的维度,还可以使用 T 属性。。

例如有个 m 行 n 列的矩阵,使用 t() 函数就能转换为 n 行 m 列的矩阵。

示例代码
importnumpyasnpa=np.arange(12).reshape(3,4)print('原数组:')print(a)print('\n')print('转置数组:')print(a.T)

输出结果如下:

原数组:

[[ 0  1  2  3]

 [ 4  5  6  7]

 [ 8  9 10 11]]





转置数组:

[[ 0  4  8]

 [ 1  5  9]

 [ 2  6 10]

 [ 3  7 11]]

matlib.empty()

matlib.empty() 函数返回一个新的矩阵,语法格式为:

numpy.matlib.empty(shape, dtype, order)

参数说明:

  • shape : 定义新矩阵形状的整数或整数元组
  • Dtype : 可选,数据类型
  • order : C(行序优先) 或者 F(列序优先)
示例代码
importnumpy.matlibimportnumpyasnpprint(np.matlib.empty((2,2)))# 填充为随机数据

输出结果为:

[[-1.49166815e-154 -1.49166815e-154]

 [ 2.17371491e-313  2.52720790e-212]]

numpy.matlib.zeros()

numpy.matlib.zeros() 函数创建一个以 0 填充的矩阵。

示例代码
importnumpy.matlibimportnumpyasnpprint(np.matlib.zeros((2,2)))

输出结果为:

[[0. 0.]

 [0. 0.]]

numpy.matlib.ones()

numpy.matlib.ones()函数创建一个以 1 填充的矩阵。

示例代码
importnumpy.matlibimportnumpyasnpprint(np.matlib.ones((2,2)))

输出结果为:

[[1. 1.]

 [1. 1.]]

numpy.matlib.eye()

numpy.matlib.eye() 函数返回一个矩阵,对角线元素为 1,其他位置为零。

numpy.matlib.eye(n, M,k, dtype)

参数说明:

  • n : 返回矩阵的行数
  • M : 返回矩阵的列数,默认为 n
  • k : 对角线的索引
  • dtype : 数据类型
示例代码
importnumpy.matlibimportnumpyasnpprint(np.matlib.eye(n=3,M=4,k=0,dtype=float))

输出结果为:

[[1. 0. 0. 0.]

 [0. 1. 0. 0.]

 [0. 0. 1. 0.]]

numpy.matlib.identity()

numpy.matlib.identity() 函数返回给定大小的单位矩阵。

单位矩阵是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为 1,除此以外全都为 0。

示例代码
importnumpy.matlibimportnumpyasnp# 大小为 5,类型位浮点型print(np.matlib.identity(5,dtype=float))

输出结果为:

[[ 1.  0.  0.  0.  0.] 

 [ 0.  1.  0.  0.  0.] 

 [ 0.  0.  1.  0.  0.] 

 [ 0.  0.  0.  1.  0.] 

 [ 0.  0.  0.  0.  1.]]

numpy.matlib.rand()

numpy.matlib.rand() 函数创建一个给定大小的矩阵,数据是随机填充的。

示例代码
importnumpy.matlibimportnumpyasnpprint(np.matlib.rand(3,3))

输出结果为:

[[0.23966718 0.16147628 0.14162   ]

 [0.28379085 0.59934741 0.62985825]

 [0.99527238 0.11137883 0.41105367]]

矩阵总是二维的,而 ndarray 是一个 n 维数组。 两个对象都是可互换的。

示例代码
importnumpy.matlibimportnumpyasnpi=np.matrix('1,2;3,4')print(i)

输出结果为:

[[1  2] 

 [3  4]]
示例代码
importnumpy.matlibimportnumpyasnpj=np.asarray(i)print(j)

输出结果为:

[[1  2] 

 [3  4]]
示例代码
importnumpy.matlibimportnumpyasnpk=np.asmatrix(j)print(k)

输出结果为:

[[1  2] 

 [3  4]]

下面这些函数也存在于 NumPy 命名空间中,但它们返回的是矩阵对象。

函数名称 参数说明 功能描述
matrix(data[, dtype, copy]) data:类数组或字符串,dtype:数据类型,copy:是否复制 从数组或字符串创建矩阵对象
asmatrix(data[, dtype]) data:输入数据,dtype:数据类型(可选) 将输入转换为矩阵对象
bmat(obj[, ldict, gdict]) obj:字符串或嵌套序列,ldict、gdict:命名空间字典(可选) 从字符串、嵌套序列或数组构建矩阵
empty(shape[, dtype, order]) shape:形状,dtype:数据类型,order:存储顺序 创建未初始化元素的矩阵
zeros(shape[, dtype, order]) shape:形状,dtype:数据类型,order:存储顺序 创建全零矩阵
ones(shape[, dtype, order]) shape:形状,dtype:数据类型,order:存储顺序 创建全一矩阵
eye(n[, M, k, dtype, order]) n:行数,M:列数,k:对角线偏移,dtype:数据类型,order:存储顺序 创建对角线为1,其余为0的矩阵
identity(n[, dtype]) n:大小,dtype:数据类型(可选) 创建单位方阵
repmat(a, m, n) a:数组或矩阵,m、n:重复次数 将数组或矩阵重复 m 行 n 列
rand( args) args :指定矩阵形状 生成指定形状的均匀分布随机矩阵
randn( args) args:指定矩阵形状 生成指定形状的标准正态分布随机矩阵

注意事项

  • 虽然 numpy.matlib 方便,但 NumPy 官方推荐使用 ndarray @ 运算符来完成矩阵运算,因为 matrix 类型存在一些限制,且在未来版本中可能被弃用。
  • 新代码建议优先使用 ndarray ,以保证更好的兼容性和灵活性。