Cython の落とし穴
ポインタを使ってあれこれしたいときの落とし穴を会社で教えてもらった。
numpy の ndarray.data の挙動が型を指定するかによって変わる
tutorials NumpyPointerToC · cython/cython Wiki · GitHub
ここに書かれた方法2でポインタを取り出したい時、引数の型の指定を取り除くと、挙動が変わってしまう。コンパイルエラーも起きず、実行もできるが、ndarray の中が書き換わらないというかなり不思議な状態になる。
これは Cython (cimport) 側の numpy と Python (import) 側の numpy の両方で data が定義されており、Cython 側の定義が優先され上書きされるからである。