2

古い C API numpy コードを「新しい」API に変更しようとしています。以前は Numpy でいくつかの内部的なものをハックしていました (はい、それは悪いことです...)。

例を見てみましょう: numpy 以外の場所にデータが割り当てられたocount numpy 配列があり、PyArray_Objectのデータ ポインターは mallocされたゾーンで設定されます。次に、これらの配列の 1 つをそれらすべてのメモリ ベースとして選択し、各データ ポインターを再割り当てして、それらのocount連続たゾーンがあることを確認します。コードは新しい 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をそれぞれ1つの配列に集めることができるようにします。NPyArray_resizeを見てきましたが、持っていないown_dataフラグが必要です...ヒント、コメントはありますか?

4

0 に答える 0