-1

我有一个密集矩阵,其中索引对应于基因。虽然基因标识符通常是整数,但它们不是连续的整数。它们也可以是字符串。

我想我可以使用带有整数键的某种增强稀疏矩阵,它们是否连续都没关系。或者这仍然会占据很大的空间,特别是如果某些基因有九位数的标识符?

此外,我担心稀疏存储是不合适的,因为这是一个全部矩阵(如果基因存在,每个细胞中都会有一段距离)。

我不太可能需要执行任何矩阵运算(例如,矩阵乘法)。我需要从矩阵(切片)中提取向量。

似乎最好的矩阵类型将由 Boost unordered_map(哈希映射)或什至可能只是一个 STL 映射作为键控。

我看错了吗?我真的需要自己动手吗?我以为我以前在某个地方看到过这样的课程。

谢谢!

4

3 回答 3

2

如果不需要矩阵运算,则不需要矩阵。带有字符串键的 2D 映射可以用map<map<string> >纯 C++ 来完成,或者相应地使用 Boost 中的哈希映射。

于 2010-05-21T22:01:53.923 回答
2

您可以使用 astd::map将基因标识符映射到唯一的、连续分配的整数(每次向图谱添加新的基因标识符时,您可以将图谱的大小作为其标识符,假设您从未从图谱中删除基因)。

如果您希望能够根据其唯一整数搜索基因的标识符,您可以使用第二张地图,或者您可以使用 a boost::bimap,它提供了元素的双向映射。

至于使用哪个矩阵容器,您可以考虑boost::ublas::matrix;它提供了对矩阵行和列的类似向量的访问。

于 2010-05-21T22:00:42.327 回答
0

Boost.MultiArray 允许您使用非连续索引进行管理。

如果您想要一个使用静态大小的矩阵的高效实现,还有Boost.LA,它现在在审查计划中。

las 还有NT2应该很快提交给 Boost。

于 2010-05-22T02:34:19.507 回答