ここにCを使用してカスタムnumpydtypeを作成する例があります:
さらに、cythonでカスタムufuncを作成することは可能のようです。
cythonを使用してdtypeを作成することも可能であるようです(そして、そのためのカスタムufuncを作成します)。出来ますか?もしそうなら、あなたは例を投稿できますか?
使用事例:
生存分析をしたいです。基本的なデータ要素は、関連する打ち切り値を持つ生存時間(フロート)です(関連する時間が失敗時間を表す場合はFalse、代わりに打ち切り時間を表す場合はTrue(つまり、観測期間中に障害が発生しなかった場合))。
明らかに、これらの値を格納するために2つのnumpy配列を使用することができます。時間のfloat配列と、censor値のbool配列です。ただし、イベントが複数回発生する可能性について説明したいと思います(これは、たとえば心臓発作の良いモデルです。複数発生する可能性があります)。この場合、MultiEvent
sと呼ぶオブジェクトの配列が必要です。それぞれMultiEvent
に一連のフロート(無修正の障害時間)と観測期間(フロートも)が含まれています。失敗の数はすべてので同じではないことに注意してくださいMultiEvent
。
MultiEvent
sの配列に対していくつかの操作を実行できる必要があります。
それぞれの失敗数を取得します
打ち切り時間を取得します(つまり、観測期間からすべての障害時間の合計を引いたものです)
パラメータの追加の配列(ハザード値の配列など)に基づいて対数尤度を計算します。たとえば、単一
MultiEvent
M
の一定のハザード値の対数尤度は次のh
ようになります。sum(log(h) + h*t for t in M.times) - h*(M.period - sum(M.times))
ここM.times
で、は障害時間のリスト(配列など)でありM.period
、は合計観測期間です。適切なnumpyブロードキャストルールを適用して、次のことができるようにします。
log_lik = logp(M_vec,h_vec)
M_vec
との寸法にh_vec
互換性がある 限り機能します。
私の現在の実装ではを使用していnumpy.vectorize
ます。これは1と2には十分に機能しますが、3には遅すぎます。MultiDataオブジェクトの障害の数が事前にわからないため、これを実行できないことにも注意してください。