【发布时间】:2020-11-11 06:21:35
【问题描述】:
我正在将这段代码从 Matlab 翻译成 Python。代码功能很好,但在 python 中速度很慢。在 Matlab 中,代码运行不到一分钟,在 python 中则需要 30 分钟!!!有python模式经验的人可以帮帮我吗?
# P({ai})
somai = 0
for i in range(1, n):
somaj = 0
for j in range(1, n):
exponencial = math.exp(-((a[i] - a[j]) * (a[i] - a[j])) / dev_a2 - ((b[i] - b[j]) * (b[i] - b[j])) / dev_b2)
somaj = somaj + exponencial
somai = somai + somaj
【问题讨论】:
-
n的值是多少? -
嗯,首先我想建议你,你可以使用 somai += somaj 和 somaj += exponencial ... 还有 ... 你在这里所做的实际上是 O(n^2 )算法......问题是......你使用了多大的数组......如果你不能减少你正在做的步骤的数量......我不是这方面的专家,但据我记得,函数exp 也应该是 O(n) ......这样它会导致 O(n^3) 这有点糟糕......我可以想象如果 n 大约是 150 等 30 分钟......
标签: python performance matlab loops for-loop