C++矩阵转置。使用Boost uBLAS和double*?

4
我需要对一个大矩阵进行原地转置(所以不能简单地分配另一个矩阵并将其转置)。不幸的是,这个大矩阵不是方阵。更糟糕的是,该矩阵存储在一个双精度数组中,列数和行数分别存储在不同的位置。
我发现boost有uBLAS库,但我没有找到一种方法将我的双精度数组包装成uBLAS矩阵。有没有办法做到这一点?
或者您推荐其他方法来完成此任务?
3个回答

2

如果你有非常大的矩阵,不想存储临时副本,一种解决方案是将矩阵数组封装到类中,并提供不同的适配器,可以以正常或转置方式迭代元素。这种方法并不是非常高效,但对于大型矩阵来说可以节省内存。


1

在矩阵运算中,矩阵转置相对容易实现。我建议您自己动手实现,不必担心uBLAS(至少对于这个问题是这样的)。虽然有一些细节需要注意,但维基百科关于原地矩阵转置的文章非常详尽。

如果您能够控制数据表示,那么可以做得更好。如果您有一个矩阵M和它的转置T,那么显然M[x][y] == T[y][x],因此根据您需要转置矩阵的目的,您可能根本不需要执行任何数据转换。


1

根据您的使用情况,您关于大型非方阵置换是正确的。在核心与 核外 方面似乎是任何人都关心的最大区别。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接