NumPy 矩阵库(numpy.matlib)用法与作用详解
NumPy 的numpy.matlib
模块是专门用于矩阵操作的工具库,其核心特点是:函数返回的是matrix
(矩阵)类型对象,而非 NumPy 默认的ndarray
(n 维数组)。矩阵本质是二维结构化数据(行数 × 列数),更适合线性代数运算;而ndarray
支持 n 维数据,默认是元素级运算,二者可互换但用途不同。
一、矩阵的基础操作:转置
矩阵转置是将矩阵的行与列互换(m 行 n 列→n 行 m 列),NumPy 提供两种便捷方式:
- T 属性:矩阵 /ndarray 对象直接调用,语法简洁(推荐);
numpy.transpose()
函数:通用转置函数,适用于多维数组。
实例解析
import numpy as np
# 创建3行4列的ndarray(虽用ndarray举例,但矩阵转置逻辑完全一致)
a = np.arange(12).reshape(3, 4) # arange(12)生成0-11的整数,reshape成3行4列
print("原数组(3行4列):")
print(a)
print("\n转置数组(4行3列):")
print(a.T) # 调用T属性完成转置
输出结果:
原数组(3行4列):
[[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]]转置数组(4行3列):
[[ 0 4 8][ 1 5 9][ 2 6 10][ 3 7 11]]
核心逻辑:原数组的第 1 行(0,1,2,3)成为转置数组的第 1 列,第 2 行(4,5,6,7)成为第 2 列,以此类推。
二、numpy.matlib 常用函数详解
numpy.matlib
提供了多种快速构造矩阵的函数,以下按功能分类讲解,包含语法、参数说明、实例与结果解析。
1. matlib.empty ():创建未初始化矩阵
该函数仅分配矩阵存储空间,不初始化元素值,因此输出的是随机垃圾值(取决于内存当前状态),适用于需后续手动赋值的场景。
语法
numpy.matlib.empty(shape, dtype=None, order='C')
参数说明
参数 | 说明 | 默认值 |
shape | 矩阵形状,用整数(表示方阵,如3 即 3×3)或元组(如(2,3) 即 2 行 3 列)指定 | 无(必传) |
dtype | 矩阵元素的数据类型,如float64 、int32 等 | float64 |
order | 内存存储顺序:C (行优先,先存完一行再存下一行)、F (列优先) | C |
实例
import numpy.matlib
import numpy as np# 创建2行2列的未初始化矩阵
empty_mat = np.matlib.empty((2, 2))
print("未初始化矩阵(元素为随机值):")
print(empty_mat)
输出结果(示例,每次运行值不同):
未初始化矩阵(元素为随机值):
[[-1.49166815e-154 -1.49166815e-154][ 2.17371491e-313 2.52720790e-212]]
2. matlib.zeros ():创建全 0 矩阵
构造所有元素均为0的矩阵,初始化值明确,适用于需要 “空白基底” 的场景(如累加计数)。
语法
numpy.matlib.zeros(shape, dtype=None, order='C')
(参数与empty()
完全一致,不再重复)
实例
import numpy.matlib
import numpy as np# 创建2行2列的全0矩阵
zeros_mat = np.matlib.zeros((2, 2))
print("全0矩阵:")
print(zeros_mat)
输出结果:
全0矩阵:
[[0. 0.][0. 0.]]
3. matlib.ones ():创建全 1 矩阵
构造所有元素均为1的矩阵,适用于需要 “统一初始值” 的场景(如权重初始值、掩码基础)。
语法
numpy.matlib.ones(shape, dtype=None, order='C')
(参数与empty()
一致)
实例
import numpy.matlib
import numpy as np# 创建2行2列的全1矩阵
ones_mat = np.matlib.ones((2, 2))
print("全1矩阵:")
print(ones_mat)
输出结果:
全1矩阵:
[[1. 1.][1. 1.]]
4. matlib.eye ():创建 “对角为 1” 的矩阵(非必为方阵)
构造一个矩阵,指定对角线(可非主对角线)元素为1,其余元素为 0,支持行数≠列数(非方阵)。
语法
numpy.matlib.eye(n, M=None, k=0, dtype=float)
参数说明
参数 | 说明 | 默认值 |
n | 矩阵的行数(必传) | 无 |
M | 矩阵的列数,若为None 则等于n (即方阵) | None |
k | 对角线索引:k=0 (主对角线,从左上到右下)、k=1 (主对角线上方)、k=-1 (主对角线下方) | 0 |
dtype | 元素数据类型 | float |
实例
import numpy.matlib
import numpy as np# 创建3行4列、主对角线(k=0)为1的矩阵
eye_mat = np.matlib.eye(n=3, M=4, k=0, dtype=float)
print("3行4列对角为1的矩阵:")
print(eye_mat)
输出结果:
3行4列对角为1的矩阵:
[[1. 0. 0. 0.][0. 1. 0. 0.][0. 0. 1. 0.]]
解析:3 行 4 列矩阵,主对角线(位置 (0,0)、(1,1)、(2,2))为 1,其余为 0。
5. matlib.identity ():创建单位矩阵(必为方阵)
单位矩阵是特殊的方阵(行数 = 列数),仅主对角线元素为 1,其余为 0,是线性代数中的 “单位元”(如矩阵乘法中,A×I=A)。
语法
numpy.matlib.identity(n, dtype=float)
参数说明
参数 | 说明 | 默认值 |
n | 矩阵的阶数(行数 = 列数) | 无(必传) |
dtype | 元素数据类型 | float |
实例
import numpy.matlib
import numpy as np# 创建5阶单位矩阵(5行5列)
identity_mat = np.matlib.identity(5, dtype=float)
print("5阶单位矩阵:")
print(identity_mat)
输出结果:
5阶单位矩阵:
[[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.]]
与eye()
的区别:identity()
仅能创建方阵,而eye()
可创建非方阵(如 3 行 4 列)。
6. matlib.rand ():创建随机矩阵
构造元素为 **[0,1) 区间均匀分布随机数 ** 的矩阵,适用于需要随机初始化的场景(如机器学习中的权重初始值)。
语法
numpy.matlib.rand(*args) # args直接传入行数、列数,如rand(3,3)即3行3列
实例
import numpy.matlib
import numpy as np# 创建3行3列的随机矩阵
rand_mat = np.matlib.rand(3, 3)
print("3行3列随机矩阵(元素∈[0,1)):")
print(rand_mat)
输出结果(示例,每次运行值不同):
3行3列随机矩阵(元素∈[0,1)):
[[0.23966718 0.16147628 0.14162 ][0.28379085 0.59934741 0.62985825][0.99527238 0.11137883 0.41105367]]
三、矩阵与 ndarray 的互换
矩阵(matrix
)和 ndarray 虽类型不同,但可通过np.asarray()
和np.asmatrix()
互相转换,数据内容保持一致。
1. 矩阵 → ndarray:np.asarray (矩阵)
实例
import numpy.matlib
import numpy as np# 1. 创建矩阵
mat = np.matrix('1,2;3,4') # 直接用字符串定义矩阵(分号分隔行,逗号分隔列)
print("原矩阵(matrix类型):")
print(mat)
print("矩阵类型:", type(mat)) # <class 'numpy.matrix'># 2. 转换为ndarray
arr = np.asarray(mat)
print("\n转换后的ndarray:")
print(arr)
print("ndarray类型:", type(arr)) # <class 'numpy.ndarray'>
2. ndarray → 矩阵:np.asmatrix (ndarray)
实例
import numpy.matlib
import numpy as np# 1. 创建ndarray(二维)
arr = np.array([[1, 2], [3, 4]])
print("原ndarray:")
print(arr)
print("ndarray类型:", type(arr)) # <class 'numpy.ndarray'># 2. 转换为矩阵
mat = np.asmatrix(arr)
print("\n转换后的矩阵:")
print(mat)
print("矩阵类型:", type(mat)) # <class 'numpy.matrix'>
注意:仅二维 ndarray 可转换为矩阵(因矩阵是二维的),高维 ndarray 转换会报错。
四、总结:矩阵库的作用与适用场景
numpy.matlib
的核心价值是简化二维矩阵的构造与线性代数运算,主要适用于以下场景:
- 线性代数计算:如矩阵乘法(
mat1 * mat2
直接是矩阵乘法,而 ndarray 需用np.dot()
或@
)、矩阵求逆、行列式计算等; - 结构化二维数据处理:如表格数据、图像像素块(需固定行 / 列结构);
- 与传统矩阵理论兼容:适合习惯线性代数中 “矩阵” 概念的用户,避免 ndarray 的多维特性带来的混淆。
若需处理三维及以上数据(如视频帧、立体图像),则更适合用 ndarray;若仅需二维线性代数操作,矩阵类型更便捷。