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

Float array as a vector of Eigen::Vector3f

我正在 GPU 上编写 Eigen 并且想使用 Eigen。我有一个 float* 代表已知大小 n 的数据三元组(例如 xyz、rgb 等)。我想将它们用作本征向量,但仅限于转换(没有内存复制,因为我在设备上),例如:

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

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

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

您可以使用多种选项:

  • 第一个模板参数是您正在模拟的 Eigen 数据类型
  • 第二个模板参数是 row/column major
  • 第三个模板参数是步幅选项,即元素和 rows/columns 在内存中的距离(例如,每行额外填充)

不完全确定它与 GPU and/or CUDA 的交互效果如何。

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

创建到原始数组的映射,然后遍历固定大小的段。据推测,'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)' 的引用,但我认为它说明了这一点。