【发布时间】:2021-09-09 21:31:41
【问题描述】:
假设我想在 Numpy 中做很多矩阵乘法;最快的方法是什么?
具体来说,这就是问题所在:我有两个很长的矩阵列表,我想将它们按元素相乘。也就是说,我有
[a_1, a_2, a_3, ..., a_N]
和
[b_1, b_2, b_3, ..., b_N],
每个a_i、b_i 是一个nxn 矩阵(n 很小,比如n=2),N 很大(比如N = 100000),我想找到矩阵积a_1 * b_1, a_2 * b_2, ...
使用 Python 和 Numpy/Scipy 最快的方法是什么?
一些选项是:
- 带有
for循环——这很慢,因为 Python 循环很慢。 - 将小矩阵放入两个
NxN块对角矩阵A和B--这将导致必须乘以比所需更大的矩阵。 - 使用
vectorize-- 这是最容易编码的,但并不比for循环快。
【问题讨论】:
-
你看过
np.vectorize吗? -
@PranavVempati vectorize 不会加快速度,它与自己编写 for 循环的速度相同。
-
@PranavVempati
np.vectorize基本上是一个 Python 循环 -
"vectorize" 在
numpy加速意义上实际上意味着用编译代码中的循环替换 python 级别循环,通常使用现有的numpy方法。答案使用matmul的“批处理”能力。
标签: python numpy linear-algebra