NumPy创建矩阵详解(附带实例)
在数学中经常会用到矩阵,而在程序中常用的是数组,可以简单理解为,矩阵是数学中的概念,而数组是计算机程序设计领域的概念。
在 NumPy 中,矩阵是数组的分支,数组和矩阵有些时候是通用的,二维数组也称矩阵。
NumPy 函数库中存在两种不同的数据类型(矩阵 matrix 和数组 array),它们都可以用于处理用行列表示的数组元素,虽然它们看起来很相似,但是在这两种数据类型上执行相同的数学运算可能得到不同的结果。
在 NumPy 中,矩阵应用十分广泛。例如,每个图像都可以被看作像素值矩阵。假设像素值仅为 0 和 1,那么 5×5 像素的图像就是一个 5×5 的矩阵,如下图所示:

图 1 5×5矩阵示意图
而 3×3 像素的图像就是一个 3×3 的矩阵,如下图所示:

图 2 3×3矩阵示意图
关于矩阵就简单介绍到这里,下面介绍如何在 NumPy 中创建矩阵。
【实例 1】使用 mat() 函数创建矩阵,程序代码如下:
【实例 2】使用 mat() 函数创建常见的矩阵。
1) 创建一个 3×3 的零(0)矩阵,程序代码如下:
2) 创建一个 2×4 的以 1 填充的矩阵,程序代码如下:
3) 使用 random 模块的 rand() 函数创建一个 3×3 的在 0 至 1 之间随机产生的二维数组,并将其转换为矩阵,程序代码如下:
4) 创建一个 1 至 8 之间的随机整数矩阵,程序代码如下:
5) 创建对角矩阵,程序代码如下:
6) 创建指定对角线元素的对角矩阵,程序代码如下:
mat() 函数只适用于创建二维矩阵,维数超过 2,mat() 就不适用了。从这一点来看,array() 函数更具通用性。
在 NumPy 中,矩阵是数组的分支,数组和矩阵有些时候是通用的,二维数组也称矩阵。
NumPy 函数库中存在两种不同的数据类型(矩阵 matrix 和数组 array),它们都可以用于处理用行列表示的数组元素,虽然它们看起来很相似,但是在这两种数据类型上执行相同的数学运算可能得到不同的结果。
在 NumPy 中,矩阵应用十分广泛。例如,每个图像都可以被看作像素值矩阵。假设像素值仅为 0 和 1,那么 5×5 像素的图像就是一个 5×5 的矩阵,如下图所示:

图 1 5×5矩阵示意图
而 3×3 像素的图像就是一个 3×3 的矩阵,如下图所示:

图 2 3×3矩阵示意图
关于矩阵就简单介绍到这里,下面介绍如何在 NumPy 中创建矩阵。
【实例 1】使用 mat() 函数创建矩阵,程序代码如下:
import numpy as np # 导入numpy模块 a = np.mat('5 6; 7 8') # 创建矩阵 b = np.mat('1 2; 3 4') print(a) print(b) print(type(a)) # 判断类型 print(type(b)) n1 = np.array([[1, 2], [3, 4]]) # 创建数组 print(n1) print(type(n1)) # 判断类型运行结果:
[[5 6]
[7 8]]
[[1 2]
[3 4]]
<class 'numpy.matrix'>
<class 'numpy.matrix'>
[[1 2]
[3 4]]
<class 'numpy.ndarray'>
【实例 2】使用 mat() 函数创建常见的矩阵。
1) 创建一个 3×3 的零(0)矩阵,程序代码如下:
import numpy as np # 创建一个3×3的零矩阵 data1 = np.mat(np.zeros((3, 3))) print(data1)运行结果:
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
2) 创建一个 2×4 的以 1 填充的矩阵,程序代码如下:
import numpy as np # 创建一个2×4的以1填充的矩阵 data1 = np.mat(np.ones((2, 4))) print(data1)运行结果:
[[1. 1. 1. 1.]
[1. 1. 1. 1.]]
3) 使用 random 模块的 rand() 函数创建一个 3×3 的在 0 至 1 之间随机产生的二维数组,并将其转换为矩阵,程序代码如下:
import numpy as np data1 = np.mat(np.random.rand(3, 3)) print(data1)运行结果:
[[0.23593472 0.32558883 0.42637078]
[0.36254276 0.6292572 0.94969203]
[0.80931869 0.3393059 0.18993806]]
4) 创建一个 1 至 8 之间的随机整数矩阵,程序代码如下:
import numpy as np data1 = np.mat(np.random.randint(1, 8, size=(3, 5))) print(data1)运行结果:
[[4 5 3 5 3]
[1 3 2 7 7]
[2 7 5 4 5]]
5) 创建对角矩阵,程序代码如下:
import numpy as np data1 = np.mat(np.eye(2, 2, dtype=int)) # 2×2对角矩阵 print(data1) data1 = np.mat(np.eye(4, 4, dtype=int)) # 4×4对角矩阵 print(data1)运行结果:
[[1 0]
[0 1]]
[[1 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 1]]
6) 创建指定对角线元素的对角矩阵,程序代码如下:
import numpy as np a = [1, 2, 3] data1 = np.mat(np.diag(a)) # 对角线元素为1、2、3的矩阵 print(data1) b = [4, 5, 6] data1 = np.mat(np.diag(b)) # 对角线元素为4、5、6的矩阵 print(data1)运行结果:
[[1 0 0]
[0 2 0]
[0 0 3]]
[[4 0 0]
[0 5 0]
[0 0 6]]
mat() 函数只适用于创建二维矩阵,维数超过 2,mat() 就不适用了。从这一点来看,array() 函数更具通用性。