2

我尝试将旧的 C API numpy 代码更改为“新”API。我曾经在 Numpy 中破解一些内部的东西(是的,这很糟糕......),我现在想知道如何改变它。

让我们举个例子:我有ocount 个numpy 数组,其数据分配在 numpy 以外的其他地方,PyArray_Object 的数据指针设置为malloc'd区域。现在我选择其中一个数组作为所有数组的内存基础,然后重新分配每个数据指针以确保它们的数量具有连续区域。该代码现在被新 API '拒绝',我怎样才能在不侵入PyArray_Object的情况下做到这一点?

first=(PyArrayObject*)context->ctg_obj[0];
psize=PyArray_NBYTES(first);
for (j=1;j<ocount;j++)
{
  current=(PyArrayObject*)context->ctg_obj[j];
  tsize=PyArray_NBYTES(current);
  psize+=tsize;
  ((PyArrayObject*)first)->data=realloc(PyArray_DATA(first),psize);        /* *** how to do that with the API ? */
  memcpy(PyArray_DATA(first)+psize-tsize,PyArray_DATA(current),tsize);
  free(PyArray_DATA(current));
  ((PyArrayObject*)current)->data=PyArray_DATA(first)+psize-tsize;
}

我使用这个技巧来确保可以将每个代表向量坐标的单独 numpy 收集在一个数组中。我看过NPyArray_resize但它需要一个我没有的own_data标志......有什么提示吗?

4

0 回答 0