[英]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);
您可以使用多种选项:
不完全确定这与 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.