iPhone上的线性代数(使用Python / NumPy?)

10

这学期,我正在将一种压缩感知算法实现为iPhone应用程序。为此,我需要一些好的矩阵/线性代数库。我对iOS和Python都有点陌生,并寻求帮助来评估我的选择。

我知道iPhone有Accelerate框架,其中包括vecLib、BLAS和LAPACK,但我不熟悉它们的API(而且它们看起来相当令人困惑)。

我尝试过Python/numpy,并且我非常喜欢它的简单易用性——如果可以选择,我更愿意使用numpy而不是Accelerate。

我知道可以嵌入Python,但我自己却没有什么成功经验。我尝试在XCode项目中包含Enthought的EPD.framework,但大约花了一个小时玩耍后也没能让它工作。我想编译numpy会更糟糕。

作为另一种选择,我能否使用Cython (http://cython.org/) 生成C文件,然后从那里调用函数呢?我也尝试过这个,但是在包含一个.so库并调用它时遇到了更多问题。是否有任何方法让Cython生成.c和.h文件?这些.c和.h文件是否仍然依赖于numpy?

我读过一些关于PyInstaller和freeze.py的文章。这两者能帮助我吗?

除了Accelerate或Python+numpy之外,还有其他选择吗?Python+numpy是一个好的选择吗,还是很难编译/构建?Cython是一个有效的解决方案吗?

谢谢!

4个回答

3
新版的Swift编程语言与iOS 8一起使用,可以编写类似Python/Matlab的高级代码。因此,开发了一个名为swix的框架,它包装了Accelerate(/BLAS/Lapack等)框架。
完全利用Accelerate框架的代码片段:
var N = 10
var x = ones(N) * pi
var y = ones(N) * phi
var result = (x+y+4)*x

这段代码可以编译iPhone/iOS。安装的完整细节在swix文档中有详细介绍。

3

花点时间学习Accelerate命令。如果你正在做复杂的数学运算,这些函数是你想要使用的。它们更快,无限可能继续得到支持和调整以适应未来的硬件,而且它们使用的能量比朴素的解决方案少。


问题是:“除了Accelerate或Python+numpy之外,还有其他选项吗?Python+numpy是一个好选择吗?编译/构建会很困难吗?Cython是一个有效的解决方案吗?”这个答案并没有回答问题。 - Noob Saibot
奇怪的是,楼主接受了它...不确定为什么。 - Erik Kaplun

2
使用Swift并访问加速框架后,没有必要费力去运行Python。使用正确的框架,您可以使用类似于Python / numpy的语法编写高级和高效的iOS代码,并且性能将显着优于在iOS上运行numpy。
正如其他人已经发布的那样,有各种库试图“包装”加速框架以提供具有可访问API的高性能。作为另一种答案中swix库的替代方案,我使用Upsurge框架取得了巨大成功。针对您可能使用的操作类型,Upsurge可能具备您所需的所有内容。
它提供了易于使用和详细的接口,用于各种加速功能;矩阵,卷积,FFT,线性代数,数学等。它还支持许多这些操作自己的自定义张量类型。我发现与在它们之间进行选择时的swix相比,最大的优势是Upsurge没有依赖于OpenCV,也不需要任何桥接头文件(它是用纯Swift编写的),这使得调试更容易对我来说
话虽如此,它们都是很棒的框架,任何一个都可以满足您的需求。我会查看两者,并查看哪一个更适合您的需求。

1

有一些库可以在iOS上使用Python。这些库是KivyBeeware。这些库中的整个应用程序都是用Python编写的。

Kivy

  • 没有本地GUI--应用程序看起来像“Kivy”
  • 无法调用本地系统API
  • 这是一个比Beeware更成熟的项目

Beeware

  • 具有本地外观的GUI
  • 可以调用本地系统API
  • (一个较新的项目;不太成熟)

对于Kivy,请查看kivy-iosGitHub项目,对于Beeware,请查看python-ios-template


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接