[英]What is the fastest way to transpose a multi dimensional (n > 2) matrix in C++?
我在這里找到了一個很好地描述了矩形矩陣 n=2 的答案
但我的問題是如何在更一般的情況下做同樣的事情。 讓 B 將 A 轉置為
B[i1][i2][J][i4][K][i6][i7] = A[i1][i2][K][i4][J][i6][i7]
所以在這個 n=7 的特殊情況下,我們確實在標記為 J、K 的第 3 和第 5 索引之間轉置。我假設整個數據結構在緊湊的 memory 塊浮點*內。 上面的括號僅用於變換操作的符號表達。
我即將用大量數據處理更大的維度(可能 n = 7)(一些維度的排名較低,大約 3-5,其中一些非常大,大約 1000)。
有沒有辦法讓一個真正快速的算法避免出現故障,或者更好地利用 SSE(或 AVX)內在函數的優勢,就像上面提到的問題一樣?
有一個索引表來訪問您的基礎矩陣:
template <std::size_t N>
class Matrix {
std::array<std::size_t, N> index; // init to 0, 1, 2, ..., N
void transpose(std::size_t i, std::size_t j) {
std::swap(index[i],index[j]);
}
// access M[index[i]...] instead of M[i...]
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.