NumPy 矩阵

矩阵在线性代数中有着非常广泛的应用。在 NumPy 中,矩阵本质上是一个二维数组。特别注意,从 NumPy 1.10 版本开始,官方不再推荐使用传统的 “matrix 类” 来进行线性代数运算,而是推荐使用 “二维数组” 来代替。

NumPy 创建矩阵

NumPy 提供了多种创建矩阵(二维数组)的方式,最常见的是使用 numpy.array() 函数创建,当然也可以使用 NumPy 其他内置函数来创建特定的矩阵(比如全 0 矩阵、全 1 矩阵等)。

1. 使用 numpy.array() 函数

在 NumPy 中,我们可以使用 array() 函数从嵌套列表、元组等对象来创建一个矩阵(二维数组)。

语法:

numpy.array(object, dtype=None)

说明:

array() 函数接收以下 2 个常用参数(不常用的不在此列出)。

  • object(必选):可以是列表元组数组或其他可转换为数组的对象。
  • dtype(可选,默认:None):指定数组元素的数据类型,默认为 None(自动推断)。

提示: 至于 NumPy 数据类型都有哪些,另请参阅:NumPy 数据类型

示例 1:numpy.array() 创建矩阵

import numpy as np

# 从嵌套列表创建
arr1 = np.array([[1, 2], [3, 4]])
print(arr1)

# 从元组创建
arr2 = np.array(((5, 6), (7, 8)))
print(arr2)

运行结果如下。

[[1 2]
 [3 4]]
[[5 6]
 [7 8]]

分析:

通过嵌套结构可以直接创建二维数组。注意,数组与列表的主要区别在于:数组元素必须是相同数据类型。

2. 使用 NumPy 内置函数

NumPy 提供了很多内置函数(如下表所示),用于高效地创建特殊矩阵,包括全 0 矩阵、全 1 矩阵、单位矩阵等。

NumPy 特殊矩阵的函数
函数 说明
numpy.zeros(shape) 全 0 矩阵
numpy.ones(shape) 全 1 矩阵
numpy.eye(N) 单位矩阵(N 阶)
numpy.diag(vals) 对角矩阵
numpy.full(shape, value) 填充指定值的矩阵
numpy.arange().reshape() 序列重组为矩阵

示例 2:NumPy 创建特殊矩阵

import numpy as np

arr1 = np.zeros((2, 3))      # 创建一个 2×3 的全 0 矩阵
arr2 = np.ones((3, 4))       # 创建一个 3×4 的全 1 矩阵
arr3 = np.eye(3)             # 创建一个 3×3 的单位矩阵
arr4 = np.diag([1, 2, 3])    # 创建一个 3×3 的对角矩阵

print('全 0 矩阵:\n', arr1)
print('全 1 矩阵:\n', arr2)
print('单位矩阵:\n', arr3)
print('对角矩阵:\n', arr4)

运行结果如下。

0 矩阵:
 [[0. 0. 0.]
 [0. 0. 0.]]

全 1 矩阵:
 [[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]

单位矩阵:
 [[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

对角矩阵:
 [[1 0 0]
 [0 2 0]
 [0 0 3]]

分析:

NumPy 内置函数可以创建各种特定的矩阵。对于这些矩阵,我们后面几节中会逐一详细介绍。

NumPy 矩阵属性

NumPy 矩阵有很多属性,常用的如下表所示。

NumPy 矩阵的属性
属性 说明
ndim 维度的个数(矩阵恒为 2)
shape 数组的形状,比如 m 行 n 列
size 元素的个数
dtype 元素的类型
T 矩阵的转置

示例 3:NumPy 矩阵的属性

import numpy as np

arr = np.array([[1, 2], [3, 4]])

print('矩阵维度:', arr.ndim)
print('矩阵形状:', arr.shape)
print('元素个数:', arr.size)
print('元素类型:', arr.dtype)
print('矩阵转置:\n', arr.T)

运行结果如下。

矩阵维度: 2
矩阵形状: (2, 2)
元素个数: 4
元素类型: int64
矩阵转置:
 [[1 3]
 [2 4]]

NumPy 矩阵运算

NumPy 矩阵支持多种运算,主要包括以下 4 种。

  • 矩阵加法。
  • 矩阵减法。
  • 矩阵乘法。
  • 矩阵求逆。

示例 4:矩阵的基础运算

import numpy as np

a = np.array([[1,2],[3,4]])
b = np.eye(2)

# 矩阵乘法
result1 = a @ b              # 等价于:result1 = np.matmul(a,b)
print('矩阵积:\n', result1)

# 矩阵求逆
result2 = np.linalg.inv(a)
print('逆矩阵:\n', result2)

运行结果如下。

矩阵积:
 [[1. 2.]
 [3. 4.]]

逆矩阵:
 [[-2.   1. ]
 [ 1.5 -0.5]]

分析:

其中,a @ b 等价于 np.matmul(a, b)。需要注意的是,在 NumPy 的二维数组中,“*” 和 “@” 是完全不一样的!

  • a * b:表示的是 “逐元素相乘(对应位置的数字相乘)”。
  • a @ b(或 np.matmul(a, b)):表示的才是线性代数中的 “矩阵乘法(行乘列)”。

小伙伴们在做矩阵运算时,千万不要把符号用错了!

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号