首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中转换多维(n > 2)矩阵的最快方法是什么?

在C++中转换多维(n > 2)矩阵的最快方法是什么?
EN

Stack Overflow用户
提问于 2022-09-08 12:41:30
回答 1查看 88关注 0票数 0

我在这里找到了一个关于矩形矩阵n=2的答案。

What is the fastest way to transpose a matrix in C++?

但我的问题是如何在更一般的情况下这样做。设B是A的转位

代码语言:javascript
复制
B[i1][i2][J][i4][K][i6][i7] = A[i1][i2][K][i4][J][i6][i7]

因此,在这个n=7的特殊情况下,我们在标记为J,K的第3和第5索引之间进行了转置,我假设整个数据结构都在紧凑的内存块浮点数内。上面的括号仅用于转换操作的符号表达式。

我将用大量的数据来处理更大的维度(可能是n=7) (有些维度的等级较低,约为3-5,而有些维度实际上是大的,大约1000)。

有没有办法使一个真正快速的算法,避免chache-错过,甚至更好,如何使用SSE (或AVX)的本质优势,就像上面提到的问题?

EN

回答 1

Stack Overflow用户

发布于 2022-09-08 12:54:32

有一个索引表来访问基础矩阵:

代码语言:javascript
复制
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...]
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73649275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档