Получить ndim из списка pybind11

#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(), и я получаю хорошие размеры!