Преобразование std :: vector в массив NumPy без копирования данных

У меня есть библиотека C ++, которая в настоящее время имеет несколько методов, которые возвращаютstd::vector определяется как

public:
  const std::vector<uint32_t>& getValues() const;

В настоящее время я работаю над переносом всей библиотеки для Python с использованием SWIG, и пока это работает хорошо.

SWIG оборачивает этоgetValues() Функция отлично, так что он возвращает кортеж Python. Проблема в моем Python-коде, который я хочу преобразовать в массив NumPy. Конечно, я могу сделать это:

my_array = np.array(my_object.getValues(), dtype='uint32')

но это приводит к тому, что все записи в исходном векторе сначала копируются в кортеж Python SWIG, а затем снова в массив numpy. Поскольку этот вектор может быть очень большим, я бы предпочел не делать эти две копии и хотел бы, чтобы SWIG создал оболочку numpy.array для исходных векторных данных в памяти.

Я прочитал документацию дляnumpy.i но в нем явно упоминается, что выходные массивы не поддерживаются, поскольку они, похоже, работают в предположении массивов в стиле C, а не векторов C ++.

Базовая структура данных numpy.array - это просто массив в стиле C, как и C ++ std :: vector, поэтому я надеюсь, что тогда будет возможно получить доступ к тем же данным в памяти.

Есть ли способ заставить SWIG возвращать numpy.array, который не копирует исходные данные?

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

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