我有一些 Python 源代码可以处理数字列表(比如大约 10,000 个浮点数)并对这些数字进行各种计算,例如包括很多 numpy.linalg.norm。
直到我们最近开始在 C# UI 中使用此代码(通过 IronPython 从 C# 运行此 Python 代码)之前,运行时间都不是问题。我提取了一组函数调用(按照第 1 段所述执行操作),发现与 Python 2.7 相比,此代码在 IronPython 中运行的时间大约是 Python 2.7 的 4 倍(这是在排除 C#/IronPython 中的启动/设置时间之后) . 我在来自 C# 的重复 IronPython 调用周围使用 C# 秒表,并在 Python 2.7 中的 execfile 周围使用 timeit 模块(因此 Python 时间结果包括更多操作,如加载文件、创建对象......而 C# 没有't)。前者大约需要 4.0 秒,而后者大约需要 0.9 秒。
你会期待这样的差异吗?有什么想法可以解决这个问题吗?其他的建议?
编辑:
这是一个简单的代码示例,它在我的机器上的 IronPython 上运行大约慢 10 倍(在 Python 2.7 中为 4 秒,在 IronPython 中为 40 秒):
n = 700
for i in range(n-1):
for j in range(i, n):
dist = np.linalg.norm(np.array([i, i, i]) - np.array([j, j, j]))