古い 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フラグが必要です...ヒント、コメントはありますか?