Преобразование 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, который не копирует исходные данные?