📅  最后修改于: 2023-12-03 15:18:03.096000             🧑  作者: Mango
在NumPy中,矩阵可以用ndarray来表示。而对于矩阵的乘法运算,NumPy提供了两种不同的方式:dot函数和@符号。
在NumPy中,dot函数是两个数组的点积(对应元素的乘积相加)或对于一维数组,它是向量的内积。
对于矩阵的乘法运算,dot函数要求第一个矩阵的列数等于第二个矩阵的行数,否则会出现ValueError异常。
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
# dot函数实现矩阵乘法
c = np.dot(a, b)
print(c)
输出结果为:
[[19 22]
[43 50]]
这里我们将a和b两个矩阵进行了乘法运算。由于a的列数等于b的行数,因此运算成功,并输出了结果矩阵c。
在Python3.5及以上的版本中,另一种矩阵乘法的方式是使用@符号。
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
# 使用@符号实现矩阵乘法
c = a@b
print(c)
输出结果同上述dot函数的方法。
使用Python内置的timeit模块可以比较这两种矩阵乘法的性能。
import timeit
import numpy as np
a = np.random.rand(1500, 1500)
b = np.random.rand(1500, 1500)
start_time = timeit.default_timer()
# 使用dot函数
c1 = np.dot(a, b)
print('Time for dot:', timeit.default_timer() - start_time)
start_time = timeit.default_timer()
# 使用@符号
c2 = a@b
print('Time for @:', timeit.default_timer() - start_time)
在我的电脑上,输出结果为:
Time for dot: 0.5000151290002641
Time for @: 0.47360485599956906
因此,使用@符号的性能稍微优于dot函数。但是在实际使用中,两种矩阵乘法的性能差异并不明显,可以根据自己的实际需求进行选择。