10

今学期は、iPhoneアプリとして圧縮センシングアルゴリズムを実装しています。これを行うには、いくつかの優れた行列/線形代数ライブラリが必要です。私はiOSとPythonの両方に少し慣れていないので、オプションを評価するのに役立つ情報を探しています。

iPhoneにvecLib、BLAS、LAPACKを含むAccelerateフレームワークがあることは知っていますが、私はそれらのAPIに精通していません(そしてそれらはかなり混乱しているようです)。

私はPython/numpyをいじってみましたが、使い方がいかに簡単かが本当に気に入っています。選択肢があれば、Accelerateよりもnumpyを使用したいと思います。

Pythonを埋め込むことは可能ですが、私自身はほとんど運がありませんでした。EnthoughtのEPD.frameworkをXCodeプロジェクトに含めようとしましたが、1時間ほど遊んだ後、機能しませんでした。numpyのコンパイルはもっと悪くなると思います。

別の方法として、Cython(http://cython.org/)を使用してCファイルを生成し、そこから関数を呼び出すことはできますか?私もこれを試みましたが、.soライブラリを含めて呼び出すことでさらに多くの問題が発生しました。Cythonに.cおよび.hファイルを生成させる方法はありますか?.cファイルと.hファイルはまだnumpyに依存していると思いますか?

PyInstallerとfreeze.pyについていくつか読んだことがあります。それらのどちらかがここで私を助けてくれますか?

AccelerateまたはPython+numpy以外にオプションはありますか?Python + numpyは良いオプションですか、それともコンパイル/ビルドが難しいですか?Cythonは有効なソリューションですか?

ありがとうございました!

4

4 に答える 4

3

時間をかけて加速コマンドを習得してください。複雑な計算を行う場合、これらは使用したい関数です。それらははるかに高速であり、将来のハードウェアに合わせてサポートおよび調整され続ける可能性が無限に高く、さらに単純なソリューションよりも消費電力が少なくなります。

于 2012-01-14T09:28:49.597 に答える
3

iOS 8 でのSwiftプログラミング言語の新しいリリースでは、高レベルの Python/Matlab のようなコードを記述できます。そこで、 Accelerate (/BLAS/Lapack/etc) フレームワークをラップするswixというフレームワークが開発されました。

Accelerate フレームワークを十分に活用するコード スニペット:

var N = 10
var x = ones(N) * pi
var y = ones(N) * phi
var result = (x+y+4)*x

このコードは、iPhone/iOS 用にコンパイルできます。インストールの詳細については、swix のドキュメントを参照してください。

于 2015-05-12T06:32:18.880 に答える
2

Swift のリリースと Accelerate フレームワークへのアクセスにより、Python を実行するためにわざわざ行く理由はほとんどありません。適切なフレームワークを使用すると、Swift を使用して、Python/numpy に似た構文と、iOS で numpy を実行するよりも大幅に優れたパフォーマンスを備えた iOS 用の高レベルでパフォーマンスの高いコードを作成できます。

他の人がすでに投稿しているように、アクセス可能な API で高性能を提供するために Accelerate フレームワークを「ラップ」しようとするさまざまなライブラリがあります。別の回答のswixライブラリの代替として、私はUpsurgeフレームワークで大きな成功を収めました。おそらく使用する操作の種類については、Upsurge には必要なものがすべて揃っている場合があります。

さまざまな Accelerate 機能への簡単で詳細なインターフェイスを提供します。行列、畳み込み、FFT、線形代数、数学など。また、独自のカスタム テンソル型でこれらの操作の多くをサポートします。どちらかを決定するときにswixよりも優れていることがわかった大きな利点は、 UpsurgeがOpenCVに依存せず、ブリッジングヘッダーを必要としないことでした(純粋なswiftで記述されています)。これにより、デバッグが容易になりました

そうは言っても、どちらも優れたフレームワークであり、どちらもニーズをカバーします。両方を見て、どちらがニーズに適しているかを判断します。

于 2016-03-07T16:56:19.787 に答える