问题标签 [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 回答
135 浏览

emscripten - 给定 Python 库 Cythonised (--embed) 到 C 作为 Emscripten 的输入,输出的 JS 已定义函数

我想将我的 python 库转换为可以在浏览器中运行的 Javascript。到目前为止,我尝试了以下方法但没有成功。

但是 eemcc 抱怨以下内容:

这些函数在 c 输入中缺失,在 JS 输出中,它们作为未实现的存根函数存在,例如

正如预期的那样,当我尝试通过节点运行 JS 时,它会出错:

0 投票
1 回答
407 浏览

python - 在 Windows 上使用 Cython 编译:缺少源文件名

我正在尝试在 Windows 10 上使用 Cython 编译一个 hello world 示例。我有 Visual Studio 2015 社区。Python 3.5.2

我的 setup.py 看起来像这样:

我要编译的文件如下所示:

我用这个命令构建:

我不断收到此错误:

我一直在做很多研究,但我发现了很多什么都没有。我怎样才能解决这个问题?

0 投票
1 回答
232 浏览

gcc - Anaconda cython 构建的模块正在寻找错误的 GLIBCXX

让我解释一下情况。

我使用系统 g++(在 linux 下)编译了一个 c++ 库。然后构建一个 cython 模块,该模块调用预编译库中的函数。构建 cython 模块是在 anconada venv 下完成的(但 venv 内没有安装 g++。因此 cython 必须使用系统 gcc/g++)。现在在同一个anaconda venv下,导入cython模块会报错:

似乎由系统 g++ 编译的 c 库(libc_rd_halo.so)现在正在寻找 anaconda g++ 库。而且我没有在 anaconda venv 中安装 g++。


我可以通过使用 anaconda g++ 从头开始​​编译 c 库来解决这个问题。再次构建 cython 模块,然后我可以导入模块。但是我想让 anaconda cython 使用系统编译器并在导入模块时查找系统编译器库。

我的问题是:

  1. 为什么anaconda cython默认寻找本地anaconda g++,而不是系统编译器?这样做有什么好处吗?

  2. 如何让 anaconda cython 查找系统编译器库?

0 投票
2 回答
6223 浏览

python - 编译cython的HelloWorld示例:不知道如何在平台上编译C/C++代码

每当我尝试编译 simpleset cython 示例时

你好世界.pyx

安装程序.py

我正在接收

我做错了什么?

PS我正在使用

0 投票
0 回答
258 浏览

optimization - 哪个更快:python 中的 defaultdict 或 cython 中的 libcpp.map?

我正在尝试优化一个存储单词及其计数的函数。到目前为止,Python 的实现相当缓慢。我正在尝试对功能进行cythonize。我们在 cython 中对应于 defaultdict 还有哪些其他选择?

0 投票
1 回答
1699 浏览

python - Cython 文件无法编译

我有一个运行速度太慢的巨大 Python 代码。我不想用 C 重写我的整个代码,所以我做了一些研究,然后遇到了 Cython。有人建议我将我的 Python 代码保存为 .pyx 并创建一个 setup.py 文件,该文件将“细胞化”我的代码,然后将其编译成 C。

但是,当我键入时出现错误C:/Users/loic/Documents/maido-cython/setup.py build_ext –inplace

这里是我使用的代码 ( maido-cython.py) 和 4 个 numpy 文件 ( ******_maido_856x512.npy)(不用担心我将它上传到我自己的 Google 帐户):https ://drive.google.com/drive/folders/0B7P95aWmH4DUek9xcEROb0FQR0E

这是我在设置文件中写的:

有人可以告诉我我做错了什么吗?

编辑:

我听取了您的建议并更改了文件。我还更改了上传的链接:https ://drive.google.com/drive/folders/0B7P95aWmH4DUcFY0X3JycGlacDQ

当我键入C:/Users/loic/Documents/maido/setup.py build_ext –inplace与冒号字符“:”有关时,我遇到了另一个问题

我没有找到对应的unicode字符。我应该添加什么?

0 投票
0 回答
971 浏览

python - Cython:ImportError:DLL 加载失败:%1 不是有效的 Win32 应用程序

我用 Cython 编译了我的 Python 代码并得到了一个.pyd文件。我想导入它,所以建议我把它放在我的PYTHONPATH.

这里是 :

我把我的.pyd文件放进去C:\\Users\\loic\\Anaconda2\\lib\\site-packages,当我尝试用 Python 导入它时,我收到了这条消息:

然后我将我的.pyd文件放在与我的 Python 程序相同的目录中,我得到了完全相同的消息。

我做了一些研究,发现了那篇文章(使用 cython 扩展一旦编译 [在 Windows 下],如何使用 .pyd's?),但它似乎没有给我更多信息。

我在 Anaconda 2 中使用 Python 64 位,因为我编译的代码需要 Python 64 位(它需要更多内存,否则控制台很快就会在内存中饱和)。

有人能告诉我我应该怎么做才能使它与 Python 64 位一起工作吗?

编辑:如果你需要它,这是我的setup.py文件

0 投票
2 回答
1189 浏览

python - 使用 Cython 处理可变大小的列表

我想对 Sutherland-Hogman 算法的python实现进行cythonise 。该算法根据非常简单的规则(在边缘内部或外部等)更新顶点列表,但细节并不重要。这是python版本,它接受顺时针方向的多边形顶点列表。例如那些:

并计算它们的交集:

这是在rosettacode 上找到的代码,稍作修改以在没有交集的情况下返回一个空列表。

这个函数对我的应用程序来说非常慢,所以我尝试使用 numpy 对它进行 cythonize。这是我的 cython 版本。我必须在剪辑之外定义这两个函数,因为我有关于缓冲区输入的错误消息。

cython1

当我对这两个版本进行计时时,我在加速方面只获得了两倍,我需要至少 10 倍(或 100 倍!)。有什么事要做吗?如何使用 Cython 处理列表?

编辑 1:我遵循@DavidW 的建议,我分配 numpy 数组并修剪它们而不是使用 list,我现在正在使用 cdef 函数,这些函数应该可以提高 10 倍的速度,不幸的是我根本没有看到任何加速!

cython2

这是基准:

39.45

44.12

第二个更惨!

编辑 2来自 CodeReview 的 @Peter Taylor 的最佳答案使用了这样一个事实,即每次计算 inside_s 都是多余的,因为 s=e 并且您已经计算了 inside_e (并将 dc 和 n1 从函数中分解出来,但它没有多大帮助)。

混合这两个版本(只有 numpy 数组和@Peter Taylor 的技巧效果稍差)。不知道为什么?可能是因为我们必须分配一长串大小为 sP.shape[0]*cp.shape[0] 的列表?

0 投票
1 回答
2349 浏览

python - Cython:导入 .pyd 文件会返回错误(缺少初始化函数?)

我正在学习如何使用 Cython 高效地编译 Python 代码并使其更快。

这是我到目前为止所做的:

  1. 我创建了一个名为的 Python 文件math_code_python.py,并在其中放入了 4 个简单的函数。
  2. 我将该文件保存为math_code_cython.pyx.
  3. 我创建了一个名为setup.py.
  4. 我输入python C:\Users\loic\Documents\math_code\setup.py build_ext --inplace了我的Command Prompt.
  5. 我得到了一个名为math_code_cython.cp36-win_amd64.pyd我重命名的编译文件math_code_pyd.pyd
  6. 最后,我创建了一个 Python 文件test_math_code.pyd,只import math_code_pyd在其中调用了 with。当我执行这个文件时,我收到了这条消息:

    /li>

我做了一些研究,感谢那些帖子,我明白我必须提供init function

我的问题是:我该怎么做?我是否必须在末尾添加一个函数,math_code_python.py如下所示?


我的 Python 版本:

math_code_python.py

安装程序.py

0 投票
0 回答
2108 浏览

python - Cythonize python 字典对象

我正在使用 cython 来提高 python 函数的性能。基本上我只能在字典操作中提高性能。所以我试图搜索用 c 编写的任何字典,我发现 cython 本身包含一个 .pxd 文件,该文件基本上是“Cython/includes/cpython”中 .h 文件的包装器。我的问题是如果我直接使用cimport dict,如何在编译时包含上述路径?

如果我使用这个 dict.pxd 我会在性能上得到任何改进吗?我附上了 dict.pxd 的代码

https://github.com/cython/cython/blob/master/Cython/Includes/cpython/dict.pxd