<p>好吧,对于每个可能面临和我一样的问题的人,这里是我如何最终解决它。在</p>
<p>首先,我更改了<code>.h</code>文件中的头和函数的<code>.c</code>文件中的头</p>
<pre><code>void Flame_SetDataMatrix( Flame *self, float *data[], int N, int M, int T );
</code></pre>
<p>到</p>
^{pr2}$
<p>之后,我补充道</p>
<pre><code>%apply (float* IN_ARRAY2, int DIM1, int DIM2) {
(float *data, int N, int M)
};
</code></pre>
<p>到接口文件(<code>flame.i</code>)。这样就可以像这样在Python中调用函数:<code>flame.Flame_SetDataMatrix( flameobject, data, T)</code>,其中的数据是一个二维的numpy</strong>数组。在</p>
<p>现在的“问题”是到达C函数的数组格式错误,因为我们需要一个双数组(在本例中是指向浮点指针的指针)。在</p>
<p>解决方案是转换这个数组,它被包装在一个维度中,在c代码中重建双数组,如下所示:</p>
<pre><code>//n = number of rows, m= number of columns columns
void Flame_SetDataMatrix( Flame *self, float *data, int n, int m, int dt )
{
//convert data to float** for later use
int i=0, j=0;
float ** data2 = (float**) calloc( n, sizeof(float*) );
for (i=0; i<n; i++){
data2[i] = calloc( m, sizeof(float) );
for (j=0; j<m; j++){
//the data is in a single array row after row, so i*columns+j
data2[i][j] = data[i * m + j];
}
}
</code></pre>
<p>最后,我可以用同样的“技巧”把一个二维的浮点数组变回一个numpy数组,我确实需要重新塑造它,但在numpy中这很容易。在</p>
<p>希望它能帮助别人。在</p>