投掷 vnl_matrix<int> 和 vnl_matrix<double>的最佳方法
best method to cast bewteen vnl_matrix<int> and vnl_matrix<double>
在C++中,我有一个返回一个vnl_matrix<int>
和一个需要vnl_matrix<double>
作为输入的第二个类。除了在双循环中逐个转换矩阵的每个元素之外,有没有一种简单的方法可以从vnl_matrix<int>
转换为vnl_matrix<double>
?
编辑:基于另一个矩阵的矩阵的构造函数如下所示(我没有写它,有关详细信息,请参阅此处。是否可以修改此构造函数以允许"复制/转换"
//: Creates a new matrix and copies all the elements.
// O(m*n).
template <class T>
vnl_matrix<T>::vnl_matrix (vnl_matrix<T> const& from)
: num_rows(from.num_rows), num_cols(from.num_cols)
{
vnl_matrix_construct_hack();
if (from.data && from.data[0]) {
vnl_matrix_alloc_blah();
T const *src = from.data[0];
vcl_copy( src, src + this->num_rows * this->num_cols, this->data[0] );
}
else {
num_rows = 0;
num_cols = 0;
data = 0;
}
}
将一个强制转换为另一个的唯一方法是,如果你有这样的构造函数:
template <typename T>
class vnl_matrix {
// conversion
template <typename U,
typename = std::enable_if<std::is_convertible<U,T>::value>::type>
vnl_matrix(const vnl_matrix<U>& rhs);
};
据推测,该构造函数会将矩阵中的所有单元格转换为循环。但是您必须添加它 - 没有默认机制。同样,请注意,也无法从vector<int>
"转换"到vector<unsigned int>
- 您必须在那里手动构建一个新向量。
相关文章:
- Eigen - matrix.transpose 会创建矩阵的副本吗?
- 将 OpenCV-Matrix 转换为矢量
- C++在函数中创建的对 Eigen::Matrix 的悬空引用
- 为什么我们必须在 C++ 中释放数组数组,而不仅仅是整个"matrix"
- 为什么我不能从 Eigen::Matrix 继承?
- 使用 'Eigen::Matrix' 创建 'alglib::integer_1d_array'
- MATLAB API用于使用MatgetDir的C例外:Matrix :: Serialize ::在内存位置内置
- 特征"Sparse matrix format"示例是否包含错误?
- 是否存在与 Eigen::Matrix<>constexpr 构造函数相关的信息?
- What wrong with `(A.array() == A.array()).matrix()`?
- 如何从eigen :: matrix获取内存所有权
- matrix.size() 和 matrix[0].size() 有什么区别?
- 从类型 'Matrix&' 的右值初始化 类型的非 const 引用无效 'Matrix'
- 如何将 Eigen Jacobi SVD 与 Eigen Affine Matrix一起使用
- Map Eigen replicate Matrix
- | 9 |错误:非静态数据成员'matrix :: row'| 9 |错误:数组绑定不是在']']'令牌|之前的整数常数
- 如何将 Eigen::Matrix 映射到 std::vector<Eigen::vector>?
- 过载时出错 << "Exception thrown: read access violation.m.matrix was 0xCDDDCDDE."
- 有一个具有映射到 std::vector 属性的 Eigen::matrix 属性的类
- 在 Eigen::Matrix 中转换 dolfin::Matrix