当前位置: 代码网 > it编程>前端脚本>Python > 如何用numpy.matlib创建随机矩阵?rand函数参数与实例详解

如何用numpy.matlib创建随机矩阵?rand函数参数与实例详解

2026年09月29日 • Python •我要评论
numpy 的numpy.matlib模块是专门用于矩阵操作的工具库,其核心特点是:函数返回的是matrix(矩阵)类型对象,而非 numpy 默认的ndarray(n 维数组)。矩阵本质是二维结构化

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

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

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

赞 (0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com