Быстрое преобразование вектора C / C ++ в массив Numpy

Я использую 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?

5
задан Saullo G. P. Castro 12 May 2013 в 21:39
поделиться