python - IronPython 与 numpy 的 Python 速度对比

标签 python .net numpy ironpython python.net

我有一些Python源代码,可以操作数字列表的列表(例如大约10,000个 float )并对这些数字进行各种计算,例如包括大量的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]))

最佳答案

你正在使用 NUMPY?!你很幸运它能在 IronPython 中运行! The support is being added literally as we speak!

确切地说,有一个 CPython-extension-to-IronPython 接口(interface)项目,并且有一个 native CLR 端口或 numpy。我不知道您使用的是哪一种,但这两种方式都比在 CPython 中使用 C 版本慢几个数量级。

更新:

Scipy for IronPython port by Enthought您显然正在使用看起来已被遗弃:链接的存储库中的最后一次提交已有几年历史,并且 http://www.scipy.org/install.html 中缺少它, 也。从文章来看,它是一个部分移植,其中接口(interface)为 .NET,核心为 C,并与自定义接口(interface)相链接。上一段也代表它。

使用 Faster alternatives to numpy.argmax/argmin which is slow 中的信息,如果限制 CLR 和 C 核心之间的数据来回传递,您可能会获得一些加速。

关于python - IronPython 与 numpy 的 Python 速度对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26852919/

相关文章:

python - 在 Amazon EMR 上为 Pig UDF 加载我自己的 python 模块

python - 默认用户模型 OneToOneField 属性错误

python - 如何在 git bash 上使用 python

.net - 开发适用于 Windows 7 的应用程序 : Best practices/things to watch out for

.net - Xunit 以下构造函数参数没有匹配的夹具数据

python - 如何有效地向量化超几何 CDF 计算?

python - 使用 numpy 绘制圆形渐变

python - python ipaddress.IPv6Address 实例中的范围 ID

c# - Lambda 表达式和方法调用

python - 将 put 与多维 Numpy 数组一起使用时出现意外行为