问题标签 [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.
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
但不确定我应该怎么做才能解决这个警告。
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 ,据我所知,我做了它推荐的几乎所有事情。任何关于我下一步可以尝试的建议将不胜感激!
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 存储库上提出了同样的问题?
python - 如何编译整个 Python 库(包括依赖项)以便可以在 C 中使用?
如何编译整个 Python 库及其依赖项,以便它可以在 C 中使用(无需调用 Python 的运行时)。也就是说,编译后的代码嵌入了 Python 解释器,不需要在系统上安装 Python。
据我了解,当使用 Cython 编译 Python 代码时:
--embed
如果使用参数,则不调用 python 运行时- 单独编译文件
- 允许调用不同的模块(从 Python 运行时/其他编译的 Cython 文件)
尚不清楚的问题是:
- 如何从 C 中使用这些模块文件?编译后的 Python 文件在 C 中使用时可以调用其他编译后的 Python 文件吗?
- 只需要声明库入口点还是需要声明所有函数?
- 如何管理 Python 依赖项?如何编译它们(这样就不需要 Python 运行时)。
module
一个名为where __init__.py
is an empty file的 Python 库的简化示例:
http_requests.py
包含:
并run.py
包含以下内容:
如何在get_ip
不使用 Python 运行时的情况下从 C 调用函数(运行应用程序时需要安装 Python)。
上面的例子很简单。实际用例是以高采样率在 C 语言中收集/处理机器人数据。虽然 C 非常适合基本数据处理,但也有优秀的 Python 库可以进行更全面的分析。目标是调用已在 C 中部分处理的数据的 Python 库。这将使我们能够更详细地了解数据(并“实时”处理它)。数据框架太大,我们的团队无法用 C 重写。
python - CYTHON,我如何将成员函数作为回调传递给本机
我能够从本机到 Cython 获得正常的回调。
但是,如何在 cython 中将成员函数设置为回调。
我的sampleCallback.h
文件是:
我的sampleCallback.cpp
文件包含简单的实现:
现在我写了一个非常简单的 cython 包装器callback.pyx
:
当我运行一个简单的 python 代码时,它可以正常工作:
这工作得很好并且输出:: I AM BATMAN
但这不是我想要的。我希望回调函数成为 cython 定义类的一部分,所以我实现了这样的类:
这当然不起作用,因为回调原型不匹配。
正确的方法是什么?
我也试过 std::bind 这样的东西::
这也不起作用。错误 ::
我怎样才能做到这一点?请帮忙。
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' 但是问题没有解决,有没有办法解决这个问题?谢谢提前...
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 b
为import b
它将起作用。
python - 在 C 代码中找不到库
我正在尝试使用 cython 编译模块,但编译器在外部 c 文件中找不到包含库(我使用cmath
作为示例,但我想要的其他库,例如cstdio
,,cstdint
也cstring
有同样的问题)
一个最小的示例由以下 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
python - Cython 中的枚举成员名称重复 - 重新声明错误?
Cython 似乎不允许我重用枚举成员名称。
我有以下枚举,我正在尝试 cythonize:
但以下导致'UNKNOWN' redeclared
编译错误:
我该如何解决上述问题?
另外,理想情况下,我希望将其NULL
用作枚举成员名称,而不是UNKNOWN
. 但这似乎NULL
是 Cython 的特权关键字,尽管它不适用于 CPython。有什么解决方法吗?
python - 在 buildozer 中编译 Cython 文件时出错
我使用 kivy 构建了一个 android 应用程序,当我使用 buildozer 编译它以构建 apk 时,弹出以下错误;
我知道最新版本的 cython 存在一些问题,所以我降级到 cython==0.20 但没有运气,仍然是同样的错误。我已经通过降级 cython 使用 buildozer 编译了另外两个程序,但现在,在这种情况下,我不知道发生了什么。这里的其他一些答案说,在 buildozer.spec 文件中提高日志级别 2 将澄清错误的详细信息,但我是 buildozer 的新手。我不知道该怎么做。
另外,这个过程在下载 SDK 工具时花费的时间太长,所以我的资源有限。我谦虚地请求帮助我摆脱这个错误。
提前致谢!