有没有人知道在Android中什么是计算线性代数的好库(SVD,QR,LU,最小二乘,逆等)?
发布于 2015-12-19 05:18:21
传统的线性代数库是分层实现的。Basic Linear Algebra Subprogram (BLAS)位于底层。Linear Algebra Package (LAPACK)是建立在BLAS之上的。这两层库的接口早在20世纪90年代就已经标准化了,硬件供应商通常会为他们的体系结构提供各种定制的实现。LAPACK提供了您提到的线性代数库操作(SVD、QR、LU、最小二乘、逆等)。最近几年,出现了一些用户友好的线性代数库(例如Armadillo、Eigen),它们实际上为传统的BLAS和LAPACK库提供了一些包装器。
JBLAS只是传统BLAS的java实现。JAMA也是一个用Java语言实现的类LAPACK库。这两个库实际上并不是针对Android的。但是因为Android编程通常涉及Java,所以我们可以让它们在Android上工作。然而,我们不能期望这些实现的性能。我的论点是,性能是一个关键因素,因为您调用的是库,而不是自己编写的库,而且在使用Android操作系统的移动平台上,高性能通常会提高低能耗。
虽然上面的线性代数库通常针对的是中央处理器(例如,x86架构,操作系统: Linux/Windows/MacOS),但专家们现在正在取得进展,以便在移动平台(例如,ARM,操作系统: Android)上也提供全栈支持。
我刚刚注意到高通刚刚发布了自己的类似BLAS的库Snapdragon Math Library,它可以在高通定制的ARM架构上运行。通过顶层LAPACK的链接,这些线性代数运算(奇异值分解、QR、逻辑单元、最小二乘、求逆等)可以在安卓系统上高性能地实现。
最近,随着深度学习的快速发展,一些像NNPACK这样的神经网络软件包变得流行起来。在引擎盖下,它们是线性代数库,为神经网络中的不同层提供了低级的高性能原语实现。
发布于 2010-05-11 12:14:35
Jama运行得相当好。
发布于 2013-09-11 01:37:37
如果你使用C++和NDK,你可以使用Eigen。它可以使用SSE2/3/4、ARM霓虹灯和AltiVec指令集。
https://stackoverflow.com/questions/2807998
复制相似问题