首页 > 编程笔记 > Python笔记 阅读:8

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() 函数创建矩阵,程序代码如下:
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'>

从运行结果得知,mat() 函数创建的是矩阵,array() 函数创建的是数组,用 mat() 函数创建的矩阵才能进行线性代数操作。

【实例 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() 函数更具通用性。

相关文章