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

Float array as a vector of Eigen::Vector3f

本文关键字:Vector3f 向量 Eigen 数组      更新时间:2023-10-16

我正在GPU上编写一个特征,并希望使用特征。我有一个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);

您可以使用多种选项:

  • 第一个模板参数是要模拟的特征
  • 数据类型
  • 第二个模板参数是行/列主参数
  • 第三个模板参数是步幅选项,即元素和行/列在内存中的距离(例如,每行的额外填充(

不完全确定这与GPU和/或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("的引用,但我认为它说明了这一点。