gpt4 book ai didi

c++ - 如何高效转置非方阵?

转载 作者:太空狗 更新时间:2023-10-29 20:24:53 28 4
gpt4 key购买 nike

我做了一个矩阵类,我想实现一个转置方法:

template<typename T>
void Matrix<T>::Transpose()
{
// for square matrices
if(this->Width() == this->Height())
{
for(std::size_t y = 1; y < this->Height(); ++y)
{
for(std::size_t x = 0; x < y; ++x)
{
// the function operator is used to access the entries of the matrix
std::swap((*this)(x, y), (*this)(y, x));
}
}
}
else
{
// TODO
}
}

问题是如何在不分配全新矩阵(该类用于大密集矩阵)的情况下实现非方矩阵的转置方法。有办法吗?

最佳答案

转置矩阵最有效的方法是根本不转置它。

以一种允许通过额外存储行和列步长以及偏移量在同一数据缓冲区上定义子矩阵、切片或任何内容的方式设计矩阵类可能是最有效的。然后访问您使用这些数据计算索引的元素。要转置,您只需操纵这些步进值。

你可以看看 OpenCV 的 Matrix 实现(只是为了实现功能,而不是为了类设计!)

关于c++ - 如何高效转置非方阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25932812/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com