PyArray_SimpleNewFromData使第一个条目不正确

时间:2015-11-15 02:07:18

标签: python python-3.x numpy ctypes eigen

我正在将一些特征矩阵转换为PyObject&#39>:

typedef Matrix<double, Dynamic, Dynamic, RowMajor> RMatrix;

static PyObject * myfunc(PyObject * self, PyObject * args)
{
  double scalar;
  RMatrix mat_1;
  RMatrix mat_2;

  // some works

  PyObject * py_scalar = PyFloat_FromDouble(scalar);

  npy_intp size_1[2] = {(npy_intp)mat_1.rows(), (npy_intp)mat_1.cols()};
  PyObject * py_mat_1 = PyArray_SimpleNewFromData(2, size_1, NPY_DOUBLE, mat_1.data());

  npy_intp size_2[2] = {(npy_intp)mat_2.rows(), (npy_intp)mat_2.cols()};
  PyObject * py_mat_2 = PyArray_SimpleNewFromData(2, size_2, NPY_DOUBLE, mat_2.data());

  PyObject * tuple = PyTuple_New(3);
  PyTuple_SetItem(tuple, 0, py_scalar);
  PyTuple_SetItem(tuple, 1, py_mat_1);
  PyTuple_SetItem(tuple, 2, py_mat_2);
  return tuple;
}

问题是,C ++中的mat_1(0,0)与Python中的mat_1[0,0]不同(mat_2中也是如此),而其他条目则没问题。在我看来,第一个条目是未初始化的,具有不寻常的值,如2.41e-316。是什么原因?

更新:问题的原因应该是在退出函数时内存被破坏。创建一个新数组(PyArray_FromAny)并复制数据(memcpy)解决了这个问题。

0 个答案:

没有答案