我不确定如何说出这个问题...
我有一个看起来像这样的数据矩阵
A = [ x(0,0) , ..., x(0,m-1) ]
[ ... , ..., .... ]
[ x(n-1,0), ..., x(n-1,m-1) ]
其中x
本身就是一个大小为p x 1
的向量。所以矩阵的大小为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
函数进行重新整形,但我在这里看不到如何做到这一点。
答案 0 :(得分:1)
这是可能的,但代价是昂贵的整数除法和模数(如果在编译时已知p
,则可以优化这些)。
最简单的方法是使用NullaryExpr
转换行/列索引,如there所述。在你的情况下,相应的nullary仿函数将实现如下:
const typename ArgType::Scalar& operator() (Index row, Index col) const {
return m_arg(col/p, row*p + col%p);
}
然而,写访问权限是不可能的。这是因为NullaryExpr
不应该是可写的。它专为程序矩阵设计,如Zero,Ones,Identity,Random等。