当前位置: 首页 > 面试题库 >

在Cython中做列表/字典的惯用方式?

师建德
2023-03-14
问题内容

我的问题:我发现,使用原始C ++使用STL映射和向量处理大型数据集通常比使用Cython更快(且内存占用更少)。

我认为速度下降的部分原因是使用Python列表和字典,在Cython中使用较少占用数据结构可能会有一些技巧。例如,此页面(http://wiki.cython.org/tutorials/numpy)显示了如何通过预定义ND数组的大小和类型在Cython中非常快速地创建numpy数组。

问题:有什么方法可以对列表/字典进行类似的操作,例如,通过大致列出您希望在其中包含多少个元素或(键,值)对?
也就是说,在Cython中是否有惯用的方法将列表/字典转换为(快速)数据结构?

如果没有,我只需要用C ++编写并包装Cython导入即可。


问题答案:

Cython现在具有模板支持,并带有一些STL容器的声明。

参见http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html#standard-
library

这是他们给的例子:

from libcpp.vector cimport vector

cdef vector[int] vect
cdef int i
for i in range(10):
    vect.push_back(i)
for i in range(10):
    print vect[i]


 类似资料:
  • 问题内容: 如何使用Python-redis在Redis中保留针对某个键的字典列表。以下是我要针对的数据结构: 想要添加到会话列表中以及添加新会话并检索它们。如何使用Python-redis做到这一点? 问题答案: 使用pickle或json序列化字典。使用redis列表将它们存储为字符串。使用类似访问这些列表的键。如果需要获取所有会话密钥的列表,则可能需要维护一组密钥字符串。

  • 问题内容: 我有一本字典, 我想在Cython nogil函数中使用此词典。因此,我试图将其声明为 到这个阶段还可以。 现在,我需要迭代my_dict的键,如果值在列表中,则对其进行迭代。在Python中,非常简单,如下所示: 但是,在Cython内部,我也想在nogil内部实现相同的功能。由于nogil内不允许使用python对象,因此我全都陷入了困境。 有人可以帮我吗? 问题答案: 没有GIL

  • 问题内容: 我有一个看起来像这样的csv: 我想制作一个以类别为键的字典,并以剩余数据作为值的字典列表。所以它看起来像这样: (此处缩进以提高可读性)。 我像下面的代码片段一样尝试了一下,但是到那儿我什么也没得到: 问题答案: 使用:

  • 我想更改字典的纬度和经度值。 它正在抛出以下错误消息: 对于此它在targetWaypoints内打印一个完整的字典。我想打印纬度值。 提前谢谢。

  • 问题内容: 我正在尝试合并三个具有相同键,值列表或单个值的字典。 我需要将值中的所有项目添加到一个列表中。 我尝试了几种方法,但是大多数方法将值放入嵌套列表中。例如 我尝试通过遍历值来更新它: 但结果完全一样。我试图简单地添加列表,但是由于第三个字典只有一个浮点数,所以我做不到。 因此,我尝试首先以1和2的值添加列表,然后附加3的值。添加列表效果很好,但是当我尝试从第三个字典中添加浮点数时,突然整

  • 问题内容: 我有一个字典列表,我需要从字典的给定键中获取值的列表(所有字典都具有相同的键)。 例如,我有: 我需要得到1,2,3 当然,我可以通过以下方式获得它: 但是我想找到一种更好的方法。 问题答案: 使用简单的列表推导(如果您确定每个字典都有键): 否则,您需要首先检查是否存在: