eigen3 类型转换/从指针复制(溢出 uint8_t)

eigen3 type cast / copy from pointer (overflow uint8_t)

我得到一个 uint8_t * 数组(固定定义)并想将它们与 Eigen3 矩阵一起使用。

我开始使用

typedef Eigen::Matrix<uint8_t, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> Matrix8u;

memcpy.data()

但后来我注意到,例如 .sum() 我溢出了。

有没有办法在 uint8_t * 和 int32_t 之间进行快速复制? - Eigen::Map ?

问候

我会使用 Eigen::Map 将您的数组映射到 Matrix8u,然后将其转换为 Matrix32i 之类的东西。

假设您的数据是数组形式[] = {0, 1, 2, ...} 这里是示例代码:

typedef Eigen::Matrix<uint8_t, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> Matrix8u;
typedef Eigen::Matrix<int32_t, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> Matrix32i;

uint8_t data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};

Matrix32i m32i = Eigen::Map<Matrix8u>(data, rows, cols).cast<Matrix32i::Scalar>();

当然 rows*cols 必须等于数据数组的长度。