特征:块转置
Eigen: Block transpose?
我不确定如何表达这个问题...
我有一个看起来像这样的数据矩阵
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
函数进行重塑,但我只是不知道如何在这里做到这一点。
这是
可能的,但代价是昂贵的整数除法和模(如果在编译时已知p
则可以优化这些(。
因此,最简单的方法是使用NullaryExpr
来转换行/列索引,如此处所述。在您的情况下,相应的空函子将实现如下内容:
const typename ArgType::Scalar& operator() (Index row, Index col) const {
return m_arg(col/p, row*p + col%p);
}
但是,无法进行写入访问。这是因为NullaryExpr
不应该是可写的。它专为零、一、恒等程序矩阵而设计。
相关文章:
- 转置矩阵:交换元素不会更改值
- 使用 Eigen 3 库编写一个带有转置作为参数的函数
- 犰狳(C++)中的快速阵列置换(广义张量转置)
- 为什么转置这个 std::vector<std::vector<std::string> > 这么慢?
- 转置结构容器
- 我的转置矩阵代码有什么问题?
- 数组的转置和乘法
- 在C++中使用矢量转置 2D 矩阵
- 特征:块转置
- MKL矩形矩阵Inplace转置:不使用多个核心
- 并行转置不同的矩阵
- 关于次级对角线的转置(翻转)矩阵
- 输出是从您输入的矩阵中打印出矩阵的转置,但我的代码只是打印出您输入的第一个矩阵
- 如何在阵列火中避免翻转和转置的memcpy?
- CUDA矩阵与共享内存转置
- C 阵列的复合物共轭转置
- 转置期间的动态内存分配
- 转置的一维矢量的平均矢量
- 在CUDA中具有共享MEM的非方面矩阵转置
- 特征:如何加速a += coeffs * coeffs.转置()