【发布时间】:2021-07-02 12:33:52
【问题描述】:
我写了一个函数,它接受一个 N×N 数组并基于它计算一个输出数组。
我的代码如下所示:
def calculate_output(input,N):
output = np.zeros((N, N))
for y in range(N):
for x in range(N):
val1 = 0 if y-1<0 else output[y-1][x]+input[y][x]
val2 = 0 if x-1<0 else output[y][x-1]+input[y][x]
output[y][x] = max(val1,val2)
return output
N = 10000
input = np.reshape(np.random.binomial(1, [0.25] * N * N), (N, N))
output =calculate_output(input,N)
但是这个计算速度不够快,在我的机器上大约需要 300 秒。(与在 C++ 上实现时的 3 秒相比) 有什么方法可以在不编写 C 扩展的情况下改善这一点? 我曾尝试使用 pypy,但在这种情况下,使用 pypy 的代码会更慢
【问题讨论】:
-
这是你为this 尝试的解决方案,是吗?
-
如果是,您的解决方案几乎可以做到。为了正确起见,您需要使用
output[y][x] = input[y][x] + max(val1,val2)而不是在条件中添加输入,因为我们计算了起始方块的权重。 -
嗨,确实是我采纳了你的建议,它确实提高了性能。但是,它直到很慢,有什么办法可以改善吗?
标签: python arrays performance optimization