2016-12-14 5 views
1

私は奇妙な問題に直面しています。次のコード(機能の一部)インデックス作成時にNumbaタイプが変更されます

@njit 
def treedist(treedists, An, Bn, w, M, Theta): 
    print(An) 
    print(Bn) 
    print(An[1]) 
    print(Bn[1]) 

以下を印刷:

[(0.0, 1), (1.0, 18.071077087009371), (0.0, 0)] 
[(0.0, 1), (1.0, 25.897262991223062), (0.0, 0)] 
(1.0, 18) 
(1.0, 25) 

タプルの2番目の要素ののfloat64がInt64型に変換され得る何らかの理由。誰がなぜこれが起こっているのか教えてもらえますか?

ありがとうございます!

+1

タプルのリストをこの関数に入力したい場合、 'njit'は間違ったデコレータのように見えます。 – user2357112

答えて

1

Numbaは定数型のリストしか扱えないので、あなたのリストを見て、最初の要素を調べて、タイプが(float64, int64)であると考えます。機能を実行した後

treedist.inspect_types() 

または

treedist.inspect_llvm() 

:あなたが見ている場合は、これを見ることができます。その後、そのタイプについての前提が行われます。あなたが一貫性のあるタイプを持っているタプルのすべてを変更した場合:

An = [(0.0, 1.0), (1.0, 18.071077087009371), (0.0, 0.0)] 

あなたはAn[1]を印刷するときintへのキャストを取得することはできません。

矛盾した型のアイテムのリストがある場合は、numbaが失敗します(残念ながら、ここでは何もしません)。リストは厳密に均質でなければならないと言うのドキュメントを参照してください:

http://numba.pydata.org/numba-doc/0.29.0/reference/pysupported.html#list

、適切に従わない複雑なオブジェクトを処理していないためかもしれあなたのタプルを「拒否」されていないという事実正しい規則。

+0

numba issue trackerに関する問題を投稿しました:https://github.com/numba/numba/issues/2220 – JoshAdel

+0

ありがとうございました!これは確かに問題(と解決策) – user2817219

関連する問題