Вы можете обмениваться данными между Python и C ++, избегая копирования, если вы размещаете их в C ++. Вот как это сделать для одного vector<long>
, который вам нужно будет повторить для каждого в вашем внешнем векторе:
std::vector<long> vec; // TODO: populate
PyObject* dtype = PyString_FromString("i8");
PyArray_Descr* descr;
int rc = PyArray_DescrAlignConverter2(dtype.ptr(), &descr);
assert(rc == 1);
npy_intp dimension = vec.size();
PyObject* arr = PyArray_NewFromDescr(&PyArray_Type, descr, 1, &dimension,
nullptr, vec.data(), 0/*flags*/, nullptr/*init*/));
Поскольку ваши данные поступают из Python, вы можете сделать vec.resize(N)
с вышеупомянутым, чтобы эмулировать numpy.zeros(N, 'i8')
, затем заполните значения в Python (который изменит вектор в C ++).