问题标签 [cython]

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 投票
1 回答
893 浏览

python - 发出 Cythonic 警告?

在 Cython 中,通常的raise关键字会发出 C 代码,其中包含对 Cython 源文件的行和名称的引用,从而可以生成有用的错误消息。

但是,我没有看到任何警告。简单地调用warnings.warn会使解释器对警告的来源感到困惑。PyErr_WarnExplicit如果有类似于__LINE__pyx 文件的宏的东西,我可以使用。

是否有标准方法来发出警告或标准方法来引用 Cython 中的 pyx 行号?

更新

这个问题已经开放了几个月,所以我只能假设 Cython 目前没有发出警告的好方法。我会把它留在这里,以防有人找到方法/提交补丁来使这项工作正常进行。

0 投票
1 回答
501 浏览

python - Cython 代码不起作用

我写了一些 Python 代码,在使用“python”时效果很好。然后我使用“Cython”将其转换为 C,并使用 distutils 将其编译为共享库。然后我将一些代码更改为 Cython,以便它运行得更快。但是当我导入 .so 模块并尝试使用我“cdef”编辑的命令时,它说该命令不存在。原始代码:

新代码:

我尝试使用“cdef int time”,但得到了相同的结果。有什么建议吗?

0 投票
7 回答
30185 浏览

python - Cython 速度提升与可用性

我刚刚遇到 Cython,当时我正在寻找优化 Python 代码的方法。我阅读了有关 Stack Overflow、python wiki 的各种帖子,并阅读了文章“优化的一般规则”。

Cython 是我最感兴趣的东西。您可以选择在 Python 代码本身中包含其他数据类型,而不是自己编写 C 代码。

这是我试过的一个愚蠢的测试,

$ 时间 python test.pyx

$ 时间 cython test.pyx

现在,老实说,我傻眼了。我在这里使用的代码是纯python代码,我改变的只是解释器。在这种情况下,如果 cython 这么好,那为什么人们还用传统的 Python 解释器呢?Cython 是否存在任何可靠性问题?

0 投票
2 回答
923 浏览

python - Python:pyx导入依赖于本机库的pyx

我的 pyx 依赖于本机库

pyximport.install()该怎么办?pyxinstall 中的自动构建不知道与本机库链接,因此构建失败......

0 投票
2 回答
5859 浏览

python - Cython 中的 64 位整数

我正在尝试使用 Cython 将 C++ 库(pHash)与 Python 接口,但我遇到了一些类型的问题。库函数使用“unsigned long long”,我找不到用这种类型声明变量和参数的方法。我搜索了可以与 cdef 一起使用的类型列表,但一无所获。谁能指出这样的列表(如果存在)或以其他方式建议在 Cython 中使用 64 位类型的方法?谢谢。

0 投票
4 回答
26393 浏览

python - 用 cython 简单包装 C 代码

我有许多 C 函数,我想从 python 调用它们。cython 似乎是要走的路,但我真的找不到一个例子来说明这是如何完成的。我的 C 函数如下所示:

我要做的就是指定前三个参数(一个字符串和两个整数),并恢复 8 个 numpy 数组(或 python 列表。所有双精度数组都有 N 个元素)。我的代码假定指针指向已分配的内存块。此外,生成的 C 代码应该链接到一些外部库。

0 投票
2 回答
1569 浏览

python - 使用 Cython 创建 C 包装器 - Python

我一直在试图弄清楚如何包装以下 C 函数 = compress.ccompress.h

我尝试按照教程进行操作,但是在创建.pxd文件后我不知道该怎么做:|

据我了解,这是我应该拥有的 pxd 文件

在此之后,我不知道该怎么做:|


帮助将是伟大的家伙!=)


编辑:

收到此错误

无论如何谢谢=)

0 投票
3 回答
2113 浏览

python - 如何将 python/cython unicode 字符串转换为长整数数组,以进行 levenshtein 编辑距离

可能重复:
如何纠正此 Damerau-Levenshtein 实现中的错误?

我有以下Cython代码(改编自bpbio项目)进行Damerau-Levenenshtein 编辑距离计算:

该代码运行良好且快速(在我的 PC 上每秒进行 300,000...400,000 次比较)。

挑战在于使此代码也可以与 unicode 字符串一起使用。我正在运行 Python 3.1 并从数据库中检索文本,然后将其与查询文本匹配。

将这些字符串编码为bytes在将它们传递给 Cython 函数进行比较之前不是一个好主意,因为性能会受到很大影响(经过测试),并且对于包含 7 位 US ASCII 以外的字符的任何文本,结果可能是错误的。

(非常简洁的)Cython 手册确实提到了 unicode 字符串,但对手头的问题几乎没有帮助。

正如我所看到的,一个unicode字符串可以被认为是一个整数数组,每个代表一个单独的代码点,上面的代码基本上char已经在s数组上运行,所以我的猜测是我应该(1)扩展它处理 C 整数数组;(2)添加将python unicode字符串转换为C数组的代码;(3)利润!

注意: 这种方法有两个潜在问题:一个是处理 unicode 代理字符,但我想我知道如何处理这些。另一个问题是 unicode 代码点并没有真正将 1:1 映射到“字符”的概念'。我很清楚这一点,但我认为它超出了这个问题的范围。请假设一个 unicode 代码点是一个比较单位。)

所以我正在征求建议如何

  • 编写一个快速的 Cython 函数,该函数接受 python unicode 字符串并返回 Cythonunsigned int的 C 数组(4 个字节);

  • 修改显示的代码以处理这些数组并进行正确的内存分配/释放(这对我来说很陌生)。

编辑John Machin指出奇怪的类型转换char *m1等可能是为了速度和/或内存优化;这些变量仍被视为数字数组。我意识到代码没有做任何事情来防止可能的长字符串溢出;当一个数组元素超过 127 或 255(取决于所使用的 C 编译器)时,可能会出现错误结果。来自生物信息学项目的代码有点令人惊讶。

也就是说,我只对少于一百个字符的大致相同字符串的精确结果感兴趣。出于我的目的,低于 60% 相同性的结果可以安全地报告为“完全不同”(通过返回较长文本的长度),所以我想最好保留char *m1强制转换,但添加一些代码来检查溢出和在猖獗差异的情况下早期堕胎。

0 投票
2 回答
2448 浏览

python - 在 cython 中使用 numpy:定义 ndarray 数据类型/ndims

我正在尝试编写一些 cython 代码来使用 numpy 数组进行计算。Cython 似乎不喜欢我见过的所有示例中使用的 [] 来定义数据类型和维数。

例如,我有一个文件 test.pyx:

我使用 setup.py 编译它(见帖子结尾),我使用“python setup.py build_ext --inplace”运行

我得到以下输出:

而如果我删除 "[np.float64_t, ndim=2]" 部分,它工作正常。

有没有人有任何想法?

至于我的系统设置:操作系统:Windows XP

完整的,完整的pythonxy安装,版本2.6.5.1(此时最新)

pythonxy 应该带有 cython,但我最终从这个站点安装了用于 Python 2.6 的 cython 版本 0.12.1:http ://www.lfd.uci.edu/~gohlke/pythonlibs/#cython

我怀疑我以某种方式丢失了路径或其他东西:我通过将 numpy 头文件目录显式添加到 mingw 使用的包含路径来解决了一些问题(请参阅下面的 setup.py 文件)

这是我提到的 setup.py 文件:

0 投票
2 回答
1013 浏览

python - 为什么将这些 C / Cython 数组定义为字符,而不是整数数组?

为了解决这里的问题#3367795,我必须处理一些子问题。其中之一是:在所述算法(levenshtein distance)中,在内存中分配了几个数组并用行初始化

blen这里指的是 Pythonbytes变量的长度。现在据我了解算法(完整代码请参阅我的原始帖子)以及初始化代码m2清楚地表明,这些数组旨在保存整数,而不是字符,因此人们会认为正确的分配应该看起来像

等等。任何有 C 背景的人都可以向我解释为什么char要使用吗?另外,对于倾向于 Cython 的人来说可能更多,为什么会有演员表<char *>?有人会认为这char *x = malloc( ... )足以定义x.