Python3 NumPy中np.dot矩阵乘法运算规则与维度消解详解

橘子海
橘子海
发布时间:2026-10-12| 2人浏览过
原创

本文详解Python3中NumPy库np.dot函数的运算规则。重点解析矩阵乘法中维度匹配的n=x条件、非交换律特性,以及结果Shape通过消解相等维度生成的规律。同时对比列表、数组与矩阵的区别,以及*、np.multiply与np.dot在逐元素乘法与矩阵乘法上的差异,帮助开发者准确判断数组形状并避免运算错误。

Python中np.dot(a,b)的运算规则解析

首先需明确,dot运算不满足交换律,即np.dot(a, b)与np.dot(b, a)的结果通常不同。

此外,np.dot(a,b)与a.dot(b)的执行结果是一致的。

1. NumPy中数组相乘np.dot(a,b)的运算条件

针对两个数组a和b:

示例一:

a = np.array([[3], [3], [3]]) # (3,1)
b = np.array([2, 2, 1]) # (3,)
print(a, "\na的shape", a.shape)
print(b, "\nb的shape", b.shape)
c = b.dot(a)
print(c, "\nc的shape", c.shape)

输出:

 [3]
 [3]] 
a的shape (3, 1)
[2 2 1] 
b的shape (3,)
[15] 
c的shape (1,)

示例二:

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

可直接观察它们的shape属性:a的shape为(3, 4),记为(m, n);b的shape为(4, 3),记为(x, y)。

对于上述两个数组a和b:

np.dot(a, b)的运算前提条件是n等于x。若a的shape变为(4, 3),则两者无法进行dot运算。

简而言之,规律如下:若a.shape=(m,n),b.shape=(x,y),则np.dot(a,b)的运算条件为n=x。这一规则可用于在Python中快速判断数组shape是否匹配正确。

实际上,通过可视化数组运算过程,其逻辑如下:

2. np.dot(a,b)运算后的结果解析

规律:dot运算会将两组数组中相等(符合dot条件)的维度消去,剩余维度组合成新的数组。若剩余仅有一个维度,则结果为行向量(对应一维),列维度视为无。

对于a.shape=(m,n),b.shape=(x,y):

dot运算后,n和x被消去,结果shape变为(m,y)。

如果n为1(或为空),shape变为(y,)。

例如1:

a = np.array([1,1,1]) # shape=(3,)
b = np.array([[3],[3],[3]]) # shape=(3,1)
print(np.dot(a,b))
print("dot之后的shape为:", np.dot(a,b).shape)

此时3和3消去,剩余一个数值1,对应1行且无列,即shape为(1,)。

运算结果:

[9]
dot之后的shape为:(1,)

例如2:

a.shape=(4,1) 
b.shape=(1,4)

此时1和1消去,剩余shape为(4,4)。

np.dot(a,b)的shape为(4,4)

补充:Python3中的列表、数组和矩阵及*、np.dot和np.multiply解析

今日使用Python进行数据处理时,发现对Python中列表和数组的区别及其运算规则存在混淆,常导致结果不符合预期。因此查阅相关资料,发现许多资料讲解较为片面,现结合多方资料进行详细总结:

1. 列表、数组和矩阵

列表是Python中最基础的数据结构,可存储数字、字符串等任意元素,因此Python可通过列表存储数组;

数组是Python扩展库Numpy中的一种数据结构ndarray;

矩阵同样是Python扩展库Numpy中的一种数据结构mat;

既然存在列表,为何不直接使用Python中的列表,而使用Numpy?原因显而易见:Python中列表的存储效率和输入输出性能远不及Numpy中的数组和矩阵。但由于列表可存储任意元素,其通用性优于数组和矩阵。总之,列表与数组、矩阵各有优势,需视使用场合选择合适的数据结构。

同样,Numpy中的数组和矩阵也存在区别:

Numpy中的矩阵必须是2维的,而Numpy中数组可以是多维的,因此矩阵是数组的一个特例,在Numpy中矩阵继承着数组的所有特性;

同时,我们常需查看列表、数组和矩阵的属性,如size、shape、len。

其中len():返回对象的长度,可作用于列表、数组和矩阵:len(list([1,2,3]))。

size()和shape()是Numpy扩展库中特有的函数:

size():计算所有数据的个数,同样可作用于列表、数组和矩阵:np.size(np.array([1,2,3]))。

shape():获取数据每维的大小,同样可作用于列表、数组和矩阵:np.shape(np.array([1,2,3]))。

不同于len,shape和size还可作为数组和矩阵的属性(列表不支持),使用方法如下:a.shape、a.size。

2. Python中的星号(*)、np.multiply()、np.dot()

1. 星号(*):

对数组执行对应位置相乘;对矩阵执行矩阵乘法运算。

2. np.multiply()

无论对矩阵还是数组,均执行对应位置相乘。

3. np.dot()

对秩为1的数组:执行对应位置相乘并求和。

对秩不为1的数组:执行矩阵乘法运算。

对矩阵:执行矩阵乘法运算。

上述内容是对列表、数组、矩阵以及Python中各种乘法运算的总结。通过总结,对问题的理解更为清晰,现在已明确它们的用法,希望这篇博客也能帮助到大家。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。如有错误或未考虑完全的地方,望不吝赐教。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。