2

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 でロードしようとすると、同じエラーが発生しました。

誰が何が間違っているのか教えてもらえますか?

4

1 に答える 1