NumPy 矩阵库(numpy.matlib)用法与作用详解

NumPy 的numpy.matlib模块是专门用于矩阵操作 的工具库,其核心特点是:函数返回的是matrix(矩阵)类型对象,而非 NumPy 默认的ndarray(n 维数组)。矩阵本质是二维结构化数据 (行数 × 列数),更适合线性代数运算;而ndarray支持 n 维数据,默认是元素级运算,二者可互换但用途不同。

一、矩阵的基础操作:转置

矩阵转置是将矩阵的行与列互换(m 行 n 列→n 行 m 列),NumPy 提供两种便捷方式:

  • T 属性:矩阵 /ndarray 对象直接调用,语法简洁(推荐);
  • numpy.transpose()函数:通用转置函数,适用于多维数组。

实例解析

python 复制代码
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 ():创建未初始化矩阵

该函数仅分配矩阵存储空间,不初始化元素值,因此输出的是随机垃圾值(取决于内存当前状态),适用于需后续手动赋值的场景。

语法
python 复制代码
numpy.matlib.empty(shape, dtype=None, order='C')
参数说明

|--------|--------------------------------------------------|---------|
| 参数 | 说明 | 默认值 |
| shape | 矩阵形状,用整数(表示方阵,如3即 3×3)或元组(如(2,3)即 2 行 3 列)指定 | 无(必传) |
| dtype | 矩阵元素的数据类型,如float64int32等 | float64 |
| order | 内存存储顺序:C(行优先,先存完一行再存下一行)、F(列优先) | C |

实例
python 复制代码
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的矩阵,初始化值明确,适用于需要 "空白基底" 的场景(如累加计数)。

语法
python 复制代码
numpy.matlib.zeros(shape, dtype=None, order='C')

(参数与empty()完全一致,不再重复)

实例
python 复制代码
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的矩阵,适用于需要 "统一初始值" 的场景(如权重初始值、掩码基础)。

语法
python 复制代码
numpy.matlib.ones(shape, dtype=None, order='C')

(参数与empty()一致)

实例
python 复制代码
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,支持行数≠列数(非方阵)。

语法
python 复制代码
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 |

实例
python 复制代码
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)。

语法
python 复制代码
numpy.matlib.identity(n, dtype=float)
参数说明

|--------|----------------|---------|
| 参数 | 说明 | 默认值 |
| n | 矩阵的阶数(行数 = 列数) | 无(必传) |
| dtype | 元素数据类型 | float |

实例
python 复制代码
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) 区间均匀分布随机数 ** 的矩阵,适用于需要随机初始化的场景(如机器学习中的权重初始值)。

语法
python 复制代码
numpy.matlib.rand(*args)  # args直接传入行数、列数,如rand(3,3)即3行3列
实例
python 复制代码
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 (矩阵)

实例
python 复制代码
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)

实例
python 复制代码
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的核心价值是简化二维矩阵的构造与线性代数运算,主要适用于以下场景:

  1. 线性代数计算 :如矩阵乘法(mat1 * mat2直接是矩阵乘法,而 ndarray 需用np.dot()@)、矩阵求逆、行列式计算等;
  2. 结构化二维数据处理:如表格数据、图像像素块(需固定行 / 列结构);
  3. 与传统矩阵理论兼容:适合习惯线性代数中 "矩阵" 概念的用户,避免 ndarray 的多维特性带来的混淆。

若需处理三维及以上数据(如视频帧、立体图像),则更适合用 ndarray;若仅需二维线性代数操作,矩阵类型更便捷。

相关推荐
杨小码不BUG3 小时前
蛇形舞动:矩阵填充的艺术与算法(洛谷P5731)
c++·算法·矩阵·csp-j/s·循环控制
dingzd9519 小时前
Twitter矩阵养号风险提醒
线性代数·矩阵·web3·facebook·twitter·tiktok·instagram
lljss202019 小时前
2. 多维数值
numpy
王大傻09282 天前
numpy -- 算术函数 reciprocal() 和 power() 简介
python·numpy
%KT%2 天前
旋转矩阵的推导+矩阵在3DGS中的应用
线性代数·矩阵·3dgs
MYX_3092 天前
第二章 预备知识(线性代数)
python·线性代数·机器学习
豆沙沙包?3 天前
2025年--Lc169--H36.有效的数独(矩阵)--Java版
线性代数·矩阵
MoRanzhi12033 天前
12. Pandas 数据合并与拼接(concat 与 merge)
数据库·人工智能·python·数学建模·矩阵·数据分析·pandas
flashlight_hi4 天前
LeetCode 分类刷题:74. 搜索二维矩阵
python·算法·leetcode·矩阵