#python #c #pybind11
#python #c #pybind11
Вопрос:
Как я могу получить n размер списка pybind11? Я пытаюсь найти что-то вроде этого:
py::list lists = source;
if ((*source[1]).cast<py::list>().ndim() == 1){
throw std::runtime_error("source should be 2-D");
}
И мои списки выглядят так:
lists = [array([[2,3,4,4],[2,3,3,3]]), array([0,1])]
К сожалению, ndim() не существует для списка pybind11. Что еще я могу использовать, чтобы найти ndim() из массива ([0,1])?
Комментарии:
1. Я сомневаюсь, что список Python может иметь размеры — это 1 измерение (как и следовало ожидать для списка). Мое предположение: Вы должны извлечь элементы списка, которые в вашем случае являются массивами. Затем вы можете получить
ndim
из массивов. (Я не нашел функцию-членndim()
, но я не эксперт. Что я нашел, так это то, чтоpy::buffer_info
может быть запрошено уpy::array_t
. Тогдаndim
является переменной -членомpy::buffer_info
. NumPy — функции векторизации — пример исходного кода выглядит многообещающим.)2. Возможно ли преобразовать py::list в py::array_t?
3. На самом деле я могу! Я ссылался на свой array_t вот так, и это работает:
py::array_t<double> test = (*source[1]).cast<py::list>();
. После того, как я могу просто вызвать test.ndim(), и я получаю хорошие размеры!