当前位置: 首页 > news >正文

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矩阵元素的数据类型,如float64int32float64
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的核心价值是简化二维矩阵的构造与线性代数运算,主要适用于以下场景:

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

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

http://www.dtcms.com/a/465304.html

相关文章:

  • Web 开发 26
  • 正规app软件开发费用漯河网站优化
  • 人工智能学习:线性模型,损失函数,过拟合与欠拟合
  • 开篇词:为何要懂攻防?—— 实战化安全思维的建立
  • 怎么在qq上自己做网站wordpress是一款强大的
  • 网站建设公司 成本结转ppt之家模板免费下载
  • Android Vibrator学习记录
  • pop、push、unshift、shift的作用?
  • 大模型激活值相关公式说明(114)
  • unity升级对ab变更的影响
  • 谁是远程控制软件的“最优选”?UU远程、ToDesk、向日葵深度横测
  • 天机学堂升级版,海量新功能加入
  • vuedraggable拖拽任意组件并改变数据排序
  • {MySQL查询性能优化索引失效的八大场景与深度解决方案}
  • 网站整体建设方案360网站免费推广怎么做
  • 方舟优品:生产型撮合模式如何推动电商行业创新发展
  • 无人机芯片模块技术要点分析
  • 使用手机检测的智能视觉分析技术与应用 加油站使用手机 玩手机检测
  • 门户网站建设的重要性如何优化网页
  • 怎么在工商网站做实名认证海淀商城网站建设
  • 加餐 结束语
  • 做网站都需要用到什么3d建模一般学费多少
  • 深入解析 Conda、Anaconda 与 Miniconda:Python 环境管理的完整指南
  • 用elasticlient封装Elasticsearch C++ 客户端封装库
  • 使用go搭建本地mcp实现AI选股小记
  • Go语言实战案例——进阶与部署篇:编写Makefile自动构建Go项目
  • 网站代码怎么放长春百度快速优化
  • 物流好的网站模板哈尔滨网站关键词优化
  • 查看安卓设备的音视频解码器信息
  • 第三章 · 数据库管理与视频路径获取