10

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

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

我玩过 Python/numpy,我真的很喜欢它的简单易用性——如果可以选择,我更喜欢使用 numpy 而不是 Accelerate。

我知道嵌入 Python 是可能的,但我自己的运气并不好。我尝试将 Enthought 的 EPD.framework 包含在 XCode 项目中,但在玩了一个小时左右后并没有让它工作。我想编译 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

新版本的Swift编程语言与 iOS 8 允许编写高级 Python/Matlab 类代码。因此,已经开发了一个名为swix的框架,它封装了 Accelerate (/BLAS/Lapack/etc) 框架。

充分利用 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 为 iOS 编写高级且高性能的代码,其语法类似于 Python/numpy,并且性能将显着高于在 iOS 上运行 numpy。

正如其他人已经发布的那样,有各种库试图“包装”Accelerate 框架以提供高性能和可访问的 API。作为另一个答案中swix库的替代方案,我在 Upsurge 框架方面取得了巨大成功。对于您可能会使用的各种操作,Upsurge 可能拥有您需要的一切。

它为各种加速功能提供了一个简单而详细的界面;矩阵、卷积、FFT、线性代数、数学等。它还支持在自己的自定义张量类型上进行很多这些操作。当我在它们之间做出决定时,我发现swix的最大优势是 Upsurge不依赖于 OpenCV 并且不需要任何桥接头(它是用纯 swift 编写的),这使我的调试更容易。

话虽如此,它们都是很棒的框架,任何一个都可以满足您的需求。我会看看两者,看看哪一个更适合您的需求。

于 2016-03-07T16:56:19.787 回答
1

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

基维

  • 没有原生 GUI——应用看起来像“Kivy”
  • 无法进行本机系统 API 调用
  • 这是一个比 Beeware 更成熟的项目

蜂具

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

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

于 2016-06-03T17:46:42.607 回答