【发布时间】:2017-12-07 06:21:35
【问题描述】:
假设我们有一个向量和一个矩阵:
X = np.random.random((1, 384)).astype('float32')
Y = np.random.random((500000, 384)).astype('float32')
为什么np.dot(X, Y.T) 比X - Y 快很多?
In [8]: %timeit np.dot(X, Y.T)
10 loops, best of 3: 42.4 ms per loop
In [9]: %timeit X - Y
1 loop, best of 3: 501 ms per loop
我能做些什么来让这样的减法和点积一样快?
【问题讨论】:
-
维度不同时矩阵的减法?
-
numpy 广播进行减法可能会导致更多时间
-
@lamandy 是的,形状不同,这是计算曼哈顿距离的步骤之一。
-
@skrubber 是的,你认为这是由于实施吗?还是理论上不可能像点积一样快地做减法?
-
如果输入数组是浮点数,
np.dot通常会调用 BLAS 例程进行矩阵乘法。这些通常经过高度优化并且可能是多线程的,具体取决于您的 numpy 版本所链接的 BLAS 库。np.subtract始终是单线程的。