scipy の weave.inline を使用して、計算コストの高いタスクを実行しています。1 次元配列を Python スコープに戻す際に問題があります。Weave.inline は、値を Python スコープに戻す目的で、「return_val」と呼ばれる特別な引数を使用します。整数値を返す次の例はうまく機能します。
>>> from scipy.weave import inline
>>> print inline(r'''int N = 10; return_val = N;''')
10
ただし、実際にエラーを表示せずにコンパイルする次の例は、期待する配列を返しません。
>>> from scipy.weave import inline
>>> code =\
r'''
int* pairs;
int lenght = 0;
for (int i=0;i<N;i++){
lenght += 1;
pairs = (int *)malloc(sizeof(int)*lenght);
pairs[i] = i;
std::cout << pairs[i] << std::endl;
}
return_val = pairs;
'''
>>> N = 5
>>> R = inline(code,['N'])
>>> print "RETURN_VAL:",R
0
1
2
3
4
RETURN_VAL: 1
配列「ペア」のサイズを動的に再割り当てする必要があるため、numpy.array または python リスト自体を渡すことができません。