【发布时间】:2018-11-04 13:26:36
【问题描述】:
我们应该找到一种方法,将大小为 (7403, 33) 的二维数组 X 与其转置相乘
我的意思是这个 X* X.T
该解决方案应该比 np.dot(X,X.T) 快 2.5 倍。 我已经尝试了我能想到的一切
%timeit np.dot(X,X.T)
%timeit np.matmul(X,X.T)
%timeit X@X.T
%timeit np.einsum("ij, jk -> ik",X,X.T)
我只比 numpy dot 快 1.5 倍
3.17 s ± 14.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
2.03 s ± 6.82 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
2.01 s ± 6.57 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
2.02 s ± 6.67 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
【问题讨论】:
-
您的
timeit结果表明最后3 个调用相同的过程。为什么需要它更快? -
@roganjosh 我们正在学习 numpy。所以这是我们的测试。我已经尝试了我能想到的一切。有什么建议吗?
-
我认为您应该开始分析一下结果的样子。将矩阵与其转置相乘有一个有趣的结构。
-
@WillemVanOnsem 我不知道这会有什么帮助。但看起来行列式是 1。这有什么帮助?请解释一下?
-
如果你们能帮忙的话。我真的很感激
标签: python arrays numpy multiplication