gpt4 book ai didi

c++ - Eigen : block 转置?

转载 作者:行者123 更新时间:2023-11-30 05:03:54 24 4
gpt4 key购买 nike

我不太确定如何表述这个问题...

我有一个看起来像这样的数据矩阵

A = [  x(0,0) , ...,  x(0,m-1)  ]
[ ... , ..., .... ]
[ x(n-1,0), ..., x(n-1,m-1) ]

其中 x 本身是一个大小为 p x 1 的 vector 。所以矩阵的大小为 pn x m

我需要对矩阵的引用

B = [  x(0,0) , ...,  x(n-1,0)  ]
[ ... , ..., .... ]
[ x(0,m-1), ..., x(n-1,m-1) ]

如果 x 在上面的等式中被调换,那么很明显,我们会得到 B = A^T,但事实并非如此。所以我不清楚如何创建上述矩阵。

此外,如果我只需要矩阵 B 的拷贝,那么我可以使用一些 block 操作来构造它。但是,我需要一个引用。知道我该怎么做吗?

部分问题似乎是这样的:

如果 A 中的数据存储在连续内存中,则 B 中的引用将以非连续方式引用数据。例如,我认为您不能使用步幅构造 B

我广泛使用 Map 函数进行 reshape ,但我只是不知道如何在此处执行此操作。

最佳答案

这是可能的,但代价是昂贵的整数除法和模数(如果 p 在编译时已知,则可以优化这些)。

所以最简单的方法是使用 NullaryExpr 来转换行/列索引,如 there 所述.在您的情况下,相应的 nullary 仿函数将实现如下内容:

const typename ArgType::Scalar& operator() (Index row, Index col) const {
return m_arg(col/p, row*p + col%p);
}

但是,写入权限是不可能的。这是因为 NullaryExpr 不应该是可写的。它专为零、一、恒等、随机等过程矩阵而设计。

关于c++ - Eigen : block 转置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49169207/

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