【问题标题】:Linear algebra on iPhone (python/numpy?) [closed]iPhone上的线性代数(python/numpy?)[关闭]
【发布时间】:2012-02-10 05:53:28
【问题描述】:

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

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

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

我知道embed 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 是一个有效的解决方案吗?

谢谢!

【问题讨论】:

    标签: iphone python numpy accelerate-framework python-embedding


    【解决方案1】:

    花时间学习加速命令。如果您进行复杂的数学运算,这些是您想要使用的函数。它们速度更快,更有可能继续得到支持和调整以适应未来的硬件,而且 - 它们比简单的解决方案使用更少的能源。

    【讨论】:

    • -1。问题是,"Are there any options besides Accelerate or Python+numpy? Is Python+numpy a good option, or will it be hard to compile/build? Is Cython a valid solution?"。这个答案没有回答问题。
    • 奇怪的是,OP 接受了它……不知道为什么。
    【解决方案2】:

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

    充分利用 Accelerate 框架的代码 sn-p:

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

    此代码可以针对 iPhone/iOS 编译。 the swix documentation 中介绍了有关安装的全部详细信息。

    【讨论】:

      【解决方案3】:

      随着 Swift 的发布,以及它对 Accelerate 框架的访问,几乎没有理由不遗余力地让 Python 运行。使用正确的框架,您可以使用 Swift 为 iOS 编写高级且高性能的代码,其语法类似于 Python/numpy,并且性能将明显优于在 iOS 上运行 numpy。

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

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

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

      【讨论】:

        【解决方案4】:

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

        基维

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

        小心

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

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

        【讨论】:

          猜你喜欢
          • 2017-03-13
          • 1970-01-01
          • 1970-01-01
          • 2020-04-22
          • 1970-01-01
          • 1970-01-01
          • 2017-04-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多