android - Android 线性代数库

标签 android math mathematical-optimization

<分区>

有谁知道什么是在 Android 中计算线性代数的好库(SVD、QR、LU、最小二乘、逆等)?

最佳答案

传统的线性代数库是分层实现的。 Basic Linear Algebra Subprogram (BLAS)在底层。 Linear Algebra Package (LAPACK)建立在 BLAS 之上。这两个层库的接口(interface)早在 90 年代就已标准化,硬件供应商通常会为其架构提供各种定制实现。 LAPACK 提供了您提到的线性代数库操作(SVD、QR、LU、最小二乘、逆等)。近年来,出现了一些对用户更友好的线性代数库(例如 ArmadilloEigen ),它们实际上为传统的 BLAS 和 LAPACK 库提供了一些包装器。

JBLAS只是传统 BLAS 的 java 实现。 JAMA也是一个用 Java 实现的类 LAPACK 库。这两个库实际上并不针对 Android。但是由于Android编程通常涉及到Java,我们可以让它们在Android上运行。但是,我们不能指望这些实现的性能。我的论点是性能是一个关键因素,因为您是在调用库而不是自己编写库,而且高性能通常会降低采用 Android 操作系统的移动平台的能源成本。

虽然上述线性代数库通常针对 CPU(例如 x86 架构,操作系统:Linux/Windows/MacOS),但专家们现在正在取得进展,以在移动平台(例如 ARM,操作系统:Android)上提供全栈支持。

我刚刚注意到高通刚刚发布了自己的类 BLAS 库 Snapdragon Math Library ,可以运行在高通定制的ARM架构上。与顶级LAPACK链接到它,这些线性代数运算(SVD、QR、LU、最小二乘、逆等)可以在 Android 上以高性能实现。

最近,随着深度学习的快速发展,许多神经网络包如 NNPACK变得流行。在引擎盖下,它们是线性代数库,具有针对神经网络中不同层的基元的低级高性能实现。

关于android - Android 线性代数库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2807998/

相关文章:

objective-c - 任何代码示例显示如何在 objC 中求解多个线性方程?

c# - 如何检查.NET中用CPLEX编码的模型是否是真实模型?

python - 对数函数逼近算法

java - 当一个类实现一个监听器接口(interface)来监听扩展 BroadcastReceiver 的类中记录的变化时,没有任何反应

java - 为什么Math.max和Math.min不能相加或相减?

javascript - 在 Titanium Appcelerator 中,是否支持基于 URL 的选项卡组?

c# - 双除以 1

algorithm - 给定n个点,每个点都有自己的范围,调整所有点以最大化相邻点的最小距离

java - MIFARE 卡 1k 是否可以锁定命令、保护克隆或无法被其他应用程序删除

android - Kotlin 中的 Activity 转换