簡體   English   中英

在 C++ 中轉置多維(n > 2)矩陣的最快方法是什么?

[英]What is the fastest way to transpose a multi dimensional (n > 2) matrix in C++?

我在這里找到了一個很好地描述了矩形矩陣 n=2 的答案

在 C++ 中轉置矩陣的最快方法是什么?

但我的問題是如何在更一般的情況下做同樣的事情。 讓 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM