Я ищу самый быстрый способ получить std::vector<char>
и std::vector<std::string>
из c ++ в py: массив (numpy массив) с типом данных "<S1"
или просто хорошей олеодной строкой. (уничтожение источника в порядке!)
моя текущая лучшая попытка для символов
template<>
py::array
array_from_vector(std::vector<char> & m) {
std::vector<char>* ptr = new std::vector<char>(std::move(m));
auto capsule = py::capsule(ptr, [](void* p) {
delete reinterpret_cast<std::vector<char>*>(p);
});
return py::array(
py::dtype("<S1"),
{ptr->size()},
{},
ptr->data(),
capsule
);
}
однако на самом деле это все еще довольно медленно и возвращает [b'A' b'B' ...]
, что мне не нужно
Для справки, что такое «медленный»: в задаче, которая занимает 6 секунд, операция char применяется дважды и занимает 1 секунду из этих 6.
для строк, которые я использую следующее: (это занимает около 0,5 секунд на одну операцию.)
template<>
py::array
array_from_vector(std::vector<std::string> & m) {
return py::array(py::cast(std::move(m)));
}
Мне не повезло на стороне numpy, поскольку эти операции занимают значительно больше времени ...