📜  NumPy 中的矩阵乘法(1)

📅  最后修改于: 2023-12-03 15:18:03.096000             🧑  作者: Mango

NumPy 中的矩阵乘法

在NumPy中,矩阵可以用ndarray来表示。而对于矩阵的乘法运算,NumPy提供了两种不同的方式:dot函数和@符号。

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函数。但是在实际使用中,两种矩阵乘法的性能差异并不明显,可以根据自己的实际需求进行选择。