PyhonからCythonで書いたコードを呼び出して実行しています。
Cythonでは、文字列を含むスペース区切りのファイルを読み込み、
読み込んだデータをNumpy関数を使用して2次元配列として取り込もうと考えています。
実現したいこと
文字列を含む2次元配列(ndarray)を取り込む際にcdefで型宣言することで高速化を図りたいです。
高速に実行できるのであれば、Numpyを使用しない方法などの異なるアプローチでも構いませんので、
何かいい方法があればご教授願えないでしょうか。
発生している問題・エラーメッセージ
Cdefの宣言文を追加すると実行時に以下のエラーメッセージが発生しました。
(コンパイルを行い、.c、.pydファイルまではできています)
エラーメッセージ
Does not understand character buffer dtype format string ('w')
ソースコード
Cyhonソースコード(module_cython.pyx)
cython
1import numpy as np 2cimport numpy as cnp 3cimport cython 4 5ctypedef cnp.unicode DTYPE_U_t #Numpyのデータタイプを宣言 --① 6 7def fileread_cython(filepath): 8 cdef cnp.ndarray[DTYPE_U_t, ndim=2] data #deta変数を型宣言 --② 9 data = np.loadtxt(filepath, dtype = "unicode", delimiter = ' ') #csv(TSV)ファイルを読み込み 10 11 return data
呼び出し側のPythonソースコード(main.py)
python
1from module_cython import fileread_cython 2 3filepath = "C:/test/test.csv" 4 5print(fileread_cython(filepath))
試したこと
上のソースコードで①、②をコメントアウトすれば動作しますので、
unicodeとして型宣言している部分の周囲が何か間違っていると考えています。
補足情報(FW/ツールのバージョンなど)
ツール ver.
Python 3.10
Cython 0.29.32
numpy 1.23.2
あなたの回答
tips
プレビュー