问题标签 [cythonize]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1427 浏览

python - Cython:应键入索引以更有效地访问

我正在尝试将我的纯 python 实现移植到 Cython,函数签名如下:

所以我的cython函数签名如下:

我打算将它们作为纯 python 代码中的 numpy 数组,并将其传递给该函数。在代码中的某个时刻,我以如下方式访问这些数组:

当我对代码进行 cythonise 处理时,我收到以下警告Index should be typed for more efficient access

我不确定我应该怎么做?我在这里遵循了本指南:http: //docs.cython.org/en/latest/src/userguide/numpy_tutorial.html

但不确定我应该怎么做才能解决这个警告。

0 投票
1 回答
156 浏览

python - 将 Python 代码移植到 Cython 时几乎没有加速

我有一些使用 numpy 计算函数梯度的 python 代码,这是我的应用程序中的一个大瓶颈。所以,我最初的尝试是尝试用它Cython来提高性能。

因此,使用在线指南,我能够轻松地将其移植到 Cython,但得到了 15% 左右的非常适中的加速。该函数包含许多循环,我希望 Cython 能提供更好的改进。

Cython 代码如下所示。以下是仅从 Cython 调用的辅助函数。

以下是计算梯度的主要函数。

现在,我称之为:

除了最后 2 个参数之外的所有内容都是 numpy 数组,并且如 cython 函数签名中所述。python代码几乎相同,如果你愿意,我可以发布它,但它基本上是一样的。

我用 as 编译了整个东西setup.py

同样,因为我的代码中有很多循环,我的印象是 Cython 版本会快得多,但我只得到了 15% 的改进。我按照本指南进行了实施:http ://docs.cython.org/en/latest/src/userguide/numpy_tutorial.html ,据我所知,我做了它推荐的几乎所有事情。任何关于我下一步可以尝试的建议将不胜感激!

0 投票
1 回答
6515 浏览

python-3.x - Cython 编译器指令 language_level 不受尊重

我正在使用 Cython 的编译器指令(http://docs.cython.org/en/latest/src/reference/compilation.html#globally)。

编译:

所以language_level指令没有得到尊重。因此,cythonize 最终使用 Python 2 语义,并且由于上面的 print 语句在 Python 2 中无效而引发错误。

但是,包括任何 Python 语句都会使这项工作:

编译和执行:

知道 import 语句如何使language_level受到尊重吗?

我也在Cython GitHub 存储库上提出了同样的问题?

0 投票
1 回答
3845 浏览

python - 如何编译整个 Python 库(包括依赖项)以便可以在 C 中使用?

如何编译整个 Python 库及其依赖项,以便它可以在 C 中使用(无需调用 Python 的运行时)。也就是说,编译后的代码嵌入了 Python 解释器,不需要在系统上安装 Python。

据我了解,当使用 Cython 编译 Python 代码时:

  • --embed如果使用参数,则不调用 python 运行时
  • 单独编译文件
  • 允许调用不同的模块(从 Python 运行时/其他编译的 Cython 文件)

尚不清楚的问题是:

  • 如何从 C 中使用这些模块文件?编译后的 Python 文件在 C 中使用时可以调用其他编译后的 Python 文件吗?
  • 只需要声明库入口点还是需要声明所有函数?
  • 如何管理 Python 依赖项?如何编译它们(这样就不需要 Python 运行时)。

module一个名为where __init__.pyis an empty file的 Python 库的简化示例:

http_requests.py包含:

run.py包含以下内容:

如何在get_ip不使用 Python 运行时的情况下从 C 调用函数(运行应用程序时需要安装 Python)。

上面的例子很简单。实际用例是以高采样率在 C 语言中收集/处理机器人数据。虽然 C 非常适合基本数据处理,但也有优秀的 Python 库可以进行更全面的分析。目标是调用已在 C 中部分处理的数据的 Python 库。这将使我们能够更详细地了解数据(并“实时”处理它)。数据框架太大,我们的团队无法用 C 重写。

0 投票
0 回答
773 浏览

python - CYTHON,我如何将成员函数作为回调传递给本机

我能够从本机到 Cython 获得正常的回调。

但是,如何在 cython 中将成员函数设置为回调。

我的sampleCallback.h文件是:

我的sampleCallback.cpp文件包含简单的实现:

现在我写了一个非常简单的 cython 包装器callback.pyx

当我运行一个简单的 python 代码时,它可以正常工作:

这工作得很好并且输出:: I AM BATMAN

但这不是我想要的。我希望回调函数成为 cython 定义类的一部分,所以我实现了这样的类:

这当然不起作用,因为回调原型不匹配。

正确的方法是什么?

我也试过 std::bind 这样的东西::

这也不起作用。错误 ::

我怎样才能做到这一点?请帮忙。

0 投票
1 回答
901 浏览

tensorflow - “导入错误:没有名为 Cython.Build 的模块”在 Google Cloud ML Engine 上进行训练

我正在尝试使用此命令在 Google Cloud ML Engine 上训练模型。我用 Anaconda 安装了 tensorflow。但是当我训练模型时,出现了这个错误:

-导入错误:没有名为 Cython.Build 命令的模块“python setup.py egg_info”在/tmp/pip-install-0eA9cj/pycocotools/中失败,错误代码为1

我还在 setup.py 添加了这一行:

"REQUIRED_PACKAGES = ['Pillow>=1.0', 'Matplotlib>=2.1', 'Cython>=0.28', 'pycocotools>=2.0.0' 但是问题没有解决,有没有办法解决这个问题?谢谢提前...

0 投票
1 回答
1014 浏览

python - 同一包中的cython导入错误

我已经看到了这个问题,但答案似乎不起作用。以下是我的目录结构。

.pyx 文件

b.pyx 文件

b.pxd 文件

测试.py

安装程序.py

运行后python setup.py build_ext --inplace没有编译错误。但是如果我尝试运行 test.py 它会给出ImportError: No module named my_package.b.

任何输入将不胜感激。

顺便说一句,如果我们将 a.pyx 的第一行从更改cimport my_package.b as bimport b它将起作用。

0 投票
1 回答
504 浏览

python - 在 C 代码中找不到库

我正在尝试使用 cython 编译模块,但编译器在外部 c 文件中找不到包含库(我使用cmath作为示例,但我想要的其他库,例如cstdio,,cstdintcstring有同样的问题)

一个最小的示例由以下 4 个简单文件组成:

cfile.c:

test_pxd.pxd:

测试.pyx:

设置.py:

如果我运行setup.py

我得到错误:

cfile.c:1:17:致命错误:cmath:没有这样的文件或目录

应该注意的是,直接编译 c 文件,例如 with g++ -c cfile.c,不需要任何额外的链接让编译器找到这些库。

如何使 cython 中的编译器在外部 c 文件中找到cmath(以及其他,例如cstdio, cstdint, )库?cstring

0 投票
1 回答
282 浏览

python - Cython 中的枚举成员名称重复 - 重新声明错误?

Cython 似乎不允许我重用枚举成员名称。

我有以下枚举,我正在尝试 cythonize:

但以下导致'UNKNOWN' redeclared编译错误:

我该如何解决上述问题?

另外,理想情况下,我希望将其NULL用作枚举成员名称,而不是UNKNOWN. 但这似乎NULL是 Cython 的特权关键字,尽管它不适用于 CPython。有什么解决方法吗?

0 投票
1 回答
1061 浏览

python - 在 buildozer 中编译 Cython 文件时出错

我使用 kivy 构建了一个 android 应用程序,当我使用 buildozer 编译它以构建 apk 时,弹出以下错误;

我知道最新版本的 cython 存在一些问题,所以我降级到 cython==0.20 但没有运气,仍然是同样的错误。我已经通过降级 cython 使用 buildozer 编译了另外两个程序,但现在,在这种情况下,我不知道发生了什么。这里的其他一些答案说,在 buildozer.spec 文件中提高日志级别 2 将澄清错误的详细信息,但我是 buildozer 的新手。我不知道该怎么做。

另外,这个过程在下载 SDK 工具时花费的时间太长,所以我的资源有限。我谦虚地请求帮助我摆脱这个错误。

提前致谢!