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