簡體   English   中英

如何將3d和4d numpy.array傳遞給swig

[英]how to pass a 3d and 4d numpy.array to swig

我正在使用python計算某些內容,但我想使其更快。 所以我喝了

我想在同一函數中使用3d數組和4d數組。

swig.i

%apply (double *INPLACE_ARRAY3, int DIM1, int DIM2, int DIM3)\
{(double *trans, int trans_dim1, int trans_dim2, int trans_dim3)};

%apply (double *INPLACE_ARRAY4, int DIM1, int DIM2, int DIM3, int DIM4)\
{(double *sample,int sam_dim1, int sam_dim2, int sam_dim3, int sam_dim4)};

sample.h

void update_transition(double *trans,int trans_dim1,int trans_dim2, int trans_dim3,
 double *sample,int sam_dim1, int sam_dim2, int sam_dim3, int sam_dim4, double DENO);

但是當我在python中使用它時,錯誤:

**TypeError: update_transition() takes exactly 7 arguments (3 given)**

這意味着我的3d數組可以被swig識別,但是4d數組不能? 如何解決這個問題呢? 我要他們兩個。

Python表示希望函數調用有7個參數。 C ++函數的期望值為10。如果SWIG能夠同時應用這兩個類型映射,則Python函數的期望值為3,而不是7。唯一的從10變為7的方法是SWIG錯過了第二個類型映射。 因此它可以匹配函數的第一個數組,但不能匹配第二個數組。 為了確認這一點,請使用10.3.6調試類型圖模式匹配中提到的一些技術。 還要看看生成的代碼。 您可能想嘗試的一件事是使用5參數C ++測試函數,該函數需要一個1D數組和一個2D數組,並使用INPLACE_ARRAY1和2導出以生成2參數Python函數。 這是一個較簡單的情況。

如果這不能解決問題,但可以為您提供有用的信息,請將其添加到您的問題中,也許我或其他人可以再看看。

感謝Schollii的幫助。 似乎是因為它無法識別4D數組,尤其是numpy.i沒有實現這一部分。 因此,我只編寫了一個與numpy.i中編寫的3d數組類似的代碼,並將numpy.i添加到makefile中。

有用!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM