NumPy库学习之dot函数
一、简介
NumPy是一个Python科学计算的基础包,提供了大量的数学函数用于对数组进行操作。dot
函数是NumPy库中用于计算两个数组的点积的函数。点积是两个向量元素对应相乘后求和的结果,如果两个数组的维度不匹配,则无法进行点积运算。
二、语法和参数
dot
函数的基本语法如下:
numpy.dot(a, b, out=None)
参数说明:
a
:第一个输入数组。b
:第二个输入数组。out
:可选参数,用于指定输出数组的内存位置。
三、实例
3.1 一维数组的点积
import numpy as np
# 创建两个一维数组
a = np.array([1, 2, 3])
b = np.array([0, 1, 0])
# 计算点积
result = np.dot(a, b)
print(result)
输出:
2
3.2 二维数组与一维数组的点积
# 创建一个二维数组和一个一维数组
a = np.array([[1, 2], [3, 4]])
b = np.array([1, 0])
# 计算点积
result = np.dot(a, b)
print(result)
输出:
[1 3]
3.3 二维数组的矩阵乘法
# 创建两个二维数组
a = np.array([[1, 2], [3, 4]])
b = np.array([[2, 0], [1, 2]])
# 计算矩阵乘法,即两个矩阵的点积
result = np.dot(a, b)
print(result)
输出:
[[ 4 4]
[10 8]]
四、注意事项
- 点积要求参与运算的数组在相应的维度上是兼容的。对于一维数组,它们的长度必须相同;对于二维数组,第一个数组的列数必须与第二个数组的行数相匹配。
dot
函数可以用于计算两个向量的点积,也可以用于矩阵乘法。- 如果指定了
out
参数,计算结果将被存储在这个参数指定的数组中,这可以节省内存,尤其是在处理大型数组时。 - NumPy还提供了
@
运算符作为dot
函数的快捷方式,例如:a @ b
等同于np.dot(a, b)
。
五、什么时候点积?什么时候矩阵乘?
在NumPy中,np.dot
函数的行为取决于其输入参数的维度。以下是点积和矩阵乘法(乘积)的执行条件:
5.1 点积
- 当两个参数都是一维数组(向量)时,
np.dot
执行点积。 - 结果是一个标量值,即两个向量对应元素相乘后求和的结果。
5.2 矩阵乘法(乘积)
- 当至少有一个参数是二维数组(矩阵),并且第一个参数的列数与第二个参数的行数相匹配时,
np.dot
执行矩阵乘法。 - 结果是一个二维数组,其维度是第一个参数的行数乘以第二个参数的列数。
5.3 特殊情况
- 如果第一个参数是二维数组,第二个参数是一维数组,并且一维数组的长度与二维数组的列数相等,
np.dot
将执行矩阵与向量的点积(广播实现),结果是一个向量。 - 如果第一个参数是一维数组,第二个参数是二维数组,并且二维数组的行数与一维数组的长度相等,
np.dot
将执行向量与矩阵的乘法,结果是一个向量。
5.4 总结
- 点积总是涉及两个一维数组。
- 矩阵乘法可以涉及两个二维数组或一个一维数组和一个二维数组,但必须满足维度兼容性条件。