2009-10-15 75 views
4

我需要做一个大矩阵就地换位(所以分配另一个矩阵和转置它的最简单的方法将无法工作)。不幸的是,这个大矩阵并不是方形的。更糟糕的是,矩阵存储在一个双列数组中,并且行数和行数分开存储。C++矩阵变换。提升uBLAS和double *?

我发现,推动具有的uBLAS库,但我没有找到一个方法来总结我在的uBLAS矩阵双打的阵列。有没有办法做到这一点?

或者你推荐另一种方式来完成这项工作?

回答

2

如果你有非常大的矩阵和你不想存储临时拷贝一个解决办法是包装你的矩阵阵列进级,并提供不同的适配器将通过在正常或调换方式的元素进行迭代。这不是非常高效的缓存,但可以节省大型矩阵的内存。

1

矩阵运算去,矩阵转置是很容易得到正确的。我建议你自己做,而不是担心uBLAS(至少对于这个问题)。有一些微妙之处,但wikipedia's article on in-place matrix transposition是惊人的彻底。

如果你有在数据表示稍微控制,你可以做得更好。如果你有一个带有转置T的矩阵M,那么显然M [x] [y] == T [y] [x],所以根据你需要的转置矩阵,你可能不需要执行任何数据转换所有。

1

根据你的使用情况特点而言,你说得对大,非正方形换位。在核心与out-of-core似乎是任何人最关心的最大区别。