Как получить срез python для работы с моим классом массивов c ++ с помощью SWIG

У меня есть класс массива Array1D, определенный в c ++, который по существу обертывает векторный класс STL. Я расширил этот класс, чтобы я мог отображать отдельные элементы вектора массива. Вот соответствующий код в моем файле интерфейса SWIG:

namespace std{ %template(dblVector) vector<double>; } %extend Array1D{ double __getitem__(int index) { return (*self)[index]; } } 

Это позволяет мне получить доступ к отдельным элементам массива в python:

 >>> a = Array1D(10) # creates a c++ vector of length 10 with zeros >>> a[0] >>> 0 

Я хочу, например, иметь возможность называть a[1:3] , однако, когда я пытаюсь это сделать, я получаю TypeError:

 TypeError: in method 'Array1D___getitem__', argument 2 of type 'int' 

One Solution collect form web for “Как получить срез python для работы с моим классом массивов c ++ с помощью SWIG”

Проблема в том, что python передает объект Slice при вызове варианта среза getitem, и ваше определение функции ожидает int. Вам нужно будет написать версию getitem, которая берет PyObject * в качестве параметра, а затем вам придется реализовать нарезку вектора там.

Я пишу это, не настроившись, чтобы проверить его, поэтому возьмите его с солью. Но я бы сделал что-то вроде следующего.

 %extend Array1D { Array1D* __getitem__(PyObject *param) { if (PySlice_Check(param)) { /* Py_ssize_t might be needed here instead of ints */ int len = 0, start = 0, stop = 0, step = 0, slicelength = 0; len = this->size(); /* Or however you get the size of a vector */ PySlice_GetIndicesEx((PySliceObject*)param, len, &start, &stop, &step, &slicelength); /* Here do stuff in order to return an Array1D that is the proper slice given the start/stop/step defined above */ } /* Unexpected parameter, probably should throw an exception here */ } } 
  • «Нет модуля с именем« _ <module> »при импорте модуля SWIG со встроенным Python
  • Доступ к указателям void в Python (с использованием SWIG или чего-то еще)
  • В компиляции SWIG: В заголовочном файле в интерфейсе не удается разрешить другие файлы заголовков.
  • Marshaling PILON PIL Image с использованием SWIG
  • Как создать экземпляр метода шаблона класса шаблона с помощью swig?
  • swig typemap для python: входные и выходные массивы
  • setup.py: запустите build_ext перед чем-либо еще
  • Сделать класс C ++ похожим на массив numpy с помощью swig
  •  
    Interesting Posts for Van-Lav

    reverse () выбрасывает AttributeError при вызове

    Как получить номер ISBN из файла .mobi с помощью python

    При использовании os.execlp, почему `python` нуждается в` python` как argv

    использование методов класса в качестве задач сельдерея

    Как оставить / выйти / деактивировать виртуальный виртуальный python?

    Округление поплавков с ошибкой представления до ближайшего и правильного результата

    Динамическая однострочная печать в Python (время?)

    Назначить булевое значение класса в Python

    Есть ли лучший способ получить названную серию констант (перечисление) в Python?

    Что такое хороший способ рисования изображений с помощью pygame?

    Получение соответствующего модуля из функции

    Python: Рекомендуемый способ перемещения сложных структур словаря, импортированных из JSON?

    Почему моя переменная экземпляра не находится в __dict__?

    встроенный диапазон или numpy.arange: что более эффективно?

    Python Pandas DataFrame to_csv странный формат

    Python - лучший язык программирования в мире.