Python で不完全コレスキー分解を実行しようとしていますが、直接の Python パッケージが見つかりません。
私がオンラインで見つけることができるほとんどの利用可能なコードはMatlabで書かれているので、私は迂回したい
- matlab コードを共有ライブラリにコンパイルします (私は Mac OS と MATLAB_R2014a を使用しているため、
.dylib
ファイルを生成する必要があります) 。 - Ctypes を使用して Python でライブラリをロードする
詳細な手順を次に示します。
0.Matlab のソースコードをダウンロードする
コードは、F. Bach の Web ページリンクから zip ファイルにダウンロードできます。このファイルには、次のファイルが含まれています。
panc:csi-1.0 panc25$ ls
center.m csi.dll csi.mexglx csi_gaussian.dll csi_gaussian.mexglx readme.txt
csi.c csi.m csi_gaussian.c csi_gaussian.m demo_csi.m sqdist.m
1. matlab コードを共有ライブラリにコンパイルする
次に、この投稿に従って、コマンドを実行します。
mcc -v -W cpplib:libcsi -T link:lib csi
約1分後、端末が印刷MEX completed successfully
され、私のフォルダーには
panc:csi-1.0 panc25$ ls
center.m csi.m csi_gaussian.dll demo_csi.m libcsi.exports readme.txt
csi.c csi.mexglx csi_gaussian.m libcsi.cpp libcsi.h sqdist.m
csi.dll csi_gaussian.c csi_gaussian.mexglx libcsi.dylib mccExcludedFiles.log
libcsi.dylib
私が欲しい共有ライブラリはどこですか。
2. Python でライブラリをロードする
次に、ライブラリを開いIPython
てロードしようとします。
In [1]: import ctypes
In [2]: ctypes.C
ctypes.CDLL ctypes.CFUNCTYPE
In [2]: ctypes.CDLL('libcsi.dylib')
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-2-b6d0c1a91651> in <module>()
----> 1 ctypes.CDLL('libcsi.dylib')
/Users/panc25/anaconda/lib/python2.7/ctypes/__init__.pyc in __init__(self, name, mode, handle, use_errno, use_last_error)
363
364 if handle is None:
--> 365 self._handle = _dlopen(self._name, mode)
366 else:
367 self._handle = handle
OSError: dlopen(libcsi.dylib, 6): Library not loaded: @rpath/libmwmclmcrrt.8.3.dylib
Referenced from: /Users/panc25/Downloads/csi-1.0/libcsi.dylib
Reason: image not found
ctypes.CDLL('libcsi.dylib')
この問題は、ファイル名を完全なパスに置き換えた後でも解決しません。
だから私は混乱しています。共有ライブラリはありますが、Python が「画像が見つかりません」と言うのはなぜですか?
ところで
ソースコードも を介して C 実装を提供しているため、最初にファイルを作成してから、次のように共有ライブラリにコンパイルmex.h
しようとしました。.mex
.mex
panc:csi-1.0 panc25$ mex csi.c
csi.mexmaci64
ファイルを作成したもの。次に、このリンクに従って、私は電話しました:
panc:csi-1.0 panc25$ mcc -B csharedlib:csi2 csi.mexmaci64
csi2.dylib
ファイルを生成した。
しかし、Python でロードしようとすると、同じエラーが発生しました。
誰が何が間違っているのか教えてもらえますか?