问题描述
为了简化和易于维护,我在C ++代码中仅将Armadillo矩阵用于2D和1D数组。例如,我利用了向量初始化器列表 但要在实际使用之前立即将其转换为矩阵:
mat bArray = mat(colvec({0.1,0.2,0.3}));
我的大多数代码都由1D数组组成,只有很少几个地方真正需要2D Armadillo矩阵。
如果将所有(nx1)Armadillo矩阵都转换为(nx1)Armadillo列向量,我将获得显着的性能提升吗?我应该知道这两个数据结构之间还有其他细微差别吗?
解决方法
arma::vec
与arma::colvec
相同,它们只是Col<double>
的typedef。您可以在犰狳源代码的typedef_mat.hpp
文件中看到此内容。同样,arma::Col<T>
继承自Mat<T>
,就像在Col_bones.hpp
文件中一样。本质上,colvec
只是具有单个列的矩阵。除了避免从临时向量到矩阵的不必要复制之外,您什么都不会获得。尽管也许这是一个举动,但是由于colvec只是暂时的,因此即使获得的收益也微不足道。
尽管如此,如果想要一维数组,则至少为了清楚起见,请使用colvec
而不是mat
。