繁体   English   中英

浮点数组作为 Eigen::Vector3f 的向量

[英]Float array as a vector of Eigen::Vector3f

我正在 GPU 上写一个 Eigen,并想使用 Eigen。 我有一个float*表示已知大小n的数据三元组(例如 xyz、rgb 等)。 我想将它们用作特征向量,但只能使用强制转换(没有 memory 复制,因为我在设备上),例如:

const float* input=...
Eigen::Vector3f* inputAsFloat = ????

您可以使用Eigen::Map在数据数组上创建视图:

float* raw_data = ....;
Eigen::Map<Vector3f> vector_map(raw_data, raw_data_size);

您可以使用多种选项:

  • 第一个模板参数是您正在模拟的 Eigen 数据类型
  • 第二个模板参数是行/列专业
  • 第三个模板参数是步幅选项,即元素和行/列在 memory 中的距离(例如,每行的额外填充)

不完全确定这与 GPU 和/或 CUDA 的交互效果如何。

我的偏好(尽管以前的答案也可能是正确的):

对原始数组创建一个 map,然后遍历固定大小的段。 据推测,“n”是 3 的倍数。

float* input;
int n;

Eigen::Map<VectorXf> vector_map(input,n);
   for(int i = 0; i < n/3; i++)
   {
   const Vector3f& eigen_3f = vector_map.segment<3>(3*i);
   //do things with eigen_3f
   }

您不必创建对“vector_map.segment<3>(3*i)”的引用,但我认为它说明了这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM