Ввод списка списков строк в Cython - PullRequest
0 голосов
/ 21 октября 2019

У меня есть функция Cython, которая получает список списков строк:

cdef cbuild(char*** corpus, int state):
    # corpus is a list of lists of strings
    cdef char** run
    for run in corpus:
        # run is a list of strings
        ...

Я хотел бы иметь возможность набирать corpus, чтобы вызывать ускорения из Cython. Проблема в том, что это довольно сложный тип, и char***, похоже, не работает (и поэтому я не могу узнать, работает ли char** для run).

Эта функцияузкое место для моего приложения на Python, поэтому я переписываю его на Cython. Что я могу сделать, чтобы получить максимальную отдачу от Cython, набрав эти сложные объекты? Есть ли другой способ организовать мои данные, чтобы избежать этих проблем?

1 Ответ

0 голосов
/ 22 октября 2019

С C ++ это просто:

from libcpp.vector import vector
from libcpp.string import string

cdef cbuild(vector[vector[string]] corpus, int state):
    cdef vector[string] run
    cdef string word
    for run in corpus:
        for word in run:
            ...

Просто убедитесь, что language="c++" передается компилятору Cython (например, как kwarg на setuptools.Extension)

...