2012-02-18 32 views
1

这是我试图在斯卡拉实现的功能
创建一些数字的列表..说(1,2,3,4,5)//这表示1个文档及其功能
将会有n个具有不同特征的这样的列表。斯卡拉创建一个稀疏矢量

我想把这n个列表放到一个矩阵中。所以后来,如果我想像矩阵转置那样对矩阵进行操作,矩阵求逆我可以很容易地做到这一点。

目前我的列表已准备就绪,但我不确定如何使用scala的sparseVector和Encoder函数,因为此矩阵的行数很大(大约一百万),而列将是200000。性能也是一个问题

回答

3

你可以使用地图默认值来表示稀疏矩阵:

val matrix = Map((0, 0) -> 1, (0, 1) -> 2, (30, 4) -> 3).withDefaultValue(0) 

如果只有行需要是稀疏,你可以使用像Map[Int, Int]Vector小号代替。但是,一般来说,如果您关心内存或矩阵操作的性能,那么使用旨在解决此类问题的库会更好。过去我一直对Colt libraries感到满意,但还有很多其他选项,如ScalalaJScience

+0

是的!你知道矩阵操作或构建矩阵的特定于scalala的任何函数吗? – Gaurav 2012-02-18 19:02:35

+0

你可以举一个scalala MAtrix的例子吗? – Gaurav 2012-02-18 21:35:00

+0

@Guarav,Scalala文档给出了[若干示例](https://github.com/scalala/Scalala/wiki/QuickStart),介绍如何创建和操作密集矩阵。如果你需要稀疏矩阵,那么直接进入COLT可能会好得多,在那里'SparseDoubleMatrix2D'[非常明了](http://acs.lbl.gov/software/colt/api/cern/colt /matrix/impl/SparseDoubleMatrix2D.html)。 – 2012-02-20 16:27:44