Проект PyTRT на github

ользую SWIG, чтобы склеить некоторый код C ++ с Python (2.6), и часть этого клея включает в себя фрагмент кода, который преобразует большие поля данных (миллионы значений) со стороны C ++ в массив Numpy. Лучший метод, который я могу придумать, реализует итератор для класса, а затем предоставляет метод Python:

def __array__(self, dtype=float):
    return np.fromiter(self, dtype, self.size())

Проблема в том, что каждый итераторnext Вызов очень дорогой, так как он должен пройти через три или четыре обертки SWIG. Это занимает слишком много времени. Я могу гарантировать, что данные C ++ хранятся смежно (поскольку они живут в std :: vector), и просто кажется, что Numpy должен иметь возможность взять указатель на начало этих данных вместе с количеством значений, которые они содержат, и читай прямо.

Есть ли способ передать указатель наinternal_data_[0] и значениеinternal_data_.size() NumPy, чтобы он мог напрямую получить доступ или скопировать данные без всех накладных расходов Python?

Ответы на вопрос(4)

Ваш ответ на вопрос