c++ - 我可以在不复制任何数据的情况下通过向量附加特征矩阵吗?
问题描述
是否可以在不复制任何数据的情况下将特征向量附加到另一个矩阵?给定矩阵m
和向量,b
我想修改矩阵m
,以便m = [m, b]
不复制数据。这有可能吗?
一个例子是:
#include <Eigen/Core>
using namespace Eigen;
int main()
{
MatrixXd m(2,2);
m << 0, 1, 2, 3;
VectorXd b(2);
b << 4, 5;
return 0;
}
我尝试使用ggael 对相关问题的精彩回复。这个问题询问如何在不复制数据的情况下创建新矩阵,而我想修改现有矩阵。我可以使用conservativeResize
将列附加b
到m
但仅以分配新内存为代价。有人对如何进行有任何想法吗?
解决方案
我能想到的唯一解决方案是从一开始就将m
和存储b
在同一个矩阵中:
Eigen::MatrixXd mb(2,2+1);
Eigen::Ref<Eigen::MatrixXd> m = mb.leftCols(2);
Eigen::Ref<Eigen::VectorXd> b = mb.col(2);
在这些行之后m
,b
是对更大矩阵块的读/写引用,mb
只要mb
不调整大小(或破坏),它们就保持有效。但是,您不能轻易调整大小m
(您可以使用新的位置,但我怀疑您是否真的需要这个)。
如果您已经分配了数据m
并且b
希望将它们的实际数据彼此相邻,则需要复制一些内容(除非数据已经彼此相邻)。
推荐阅读
- java - 在 JBoss EAP 中使用自定义 JGroups 模块
- c# - 我是否需要检查 Parallel.Foreach 中的取消令牌
- angular - 从 AuthInterceptor 中的 HttpErrorHandle 跳过模式窗口
- python - 无法找到匹配的功能集,Windows 10
- html - 两个相等的网格显示不同的跨浏览器
- powershell - about_Parsing 文档
- git - 如何合并子模块并始终保留“我们的”?
- spring-boot - 如何从 Gradle 依赖项运行 Flyway 迁移?
- authentication - 在 .NET 核心中使用带有 WebAPI 的 kerberos 身份验证
- unity-container - 使用 ParameterOverride 解决从 5.9.0 开始的重大更改