【发布时间】:2020-07-31 05:36:53
【问题描述】:
我有一个向量数组,并计算它们与第一个向量的差异范数。 使用 python 广播时,计算比通过简单循环进行的计算要慢得多。为什么?
import numpy as np
def norm_loop(M, v):
n = M.shape[0]
d = np.zeros(n)
for i in range(n):
d[i] = np.sum((M[i] - v)**2)
return d
def norm_bcast(M, v):
n = M.shape[0]
d = np.zeros(n)
d = np.sum((M - v)**2, axis=1)
return d
M = np.random.random_sample((1000, 10000))
v = M[0]
%timeit norm_loop(M, v)
25.9 ms
%timeit norm_bcast(M, v)
38.5 ms
我有 Python 3.6.3 和 Numpy 1.14.2
在 google colab 中运行示例: https://drive.google.com/file/d/1GKzpLGSqz9eScHYFAuT8wJt4UIZ3ZTru/view?usp=sharing
【问题讨论】: