将特征矩阵向量设为0

问题描述 投票:0回答:2

我正在将霍夫变换用于特殊的应用程序,为此,我需要在向量中存储许多本征矩阵,并且一开始它们都必须为0。这就是我初始化的方式:

typedef Eigen::Matrix<int,30,150> HoughMatrix
std::vector<HoughMatrix> hough_spaces(num_spaces)

我现在的问题是,使所有这些矩阵的所有元素等于0的最快方法是什么?我尝试遍历每个Vector元素并执行:

hough_spaces[i].setZero()

但是那很慢。有没有更快的方法?还是直接将它们初始化为0的方法?谢谢您的帮助

c++ eigen
2个回答
0
投票

[有趣的部分是Eigen::Matrix似乎没有构造函数来初始化元素。从Eigen: The Matrix class

Matrix3f a;

->没有分配,没有元素的初始化

MatrixXf a(10,15);

->已分配但未初始化的元素

最后(!)一些构造函数,允许初始化小尺寸向量的元素:

Vector2d a(5.0, 6.0);
Vector3d b(5.0, 6.0, 7.0);
Vector4d c(5.0, 6.0, 7.0, 8.0);

如果您继续阅读Eigen: Advanced initialization,则可以找到

特殊矩阵和数组

Matrix和Array类具有静态方法,如Zero(),该方法可用于将所有系数初始化为零。 [...]

示例

std::cout << "A fixed-size array:\n";
Array33f a1 = Array33f::Zero();
std::cout << a1 << "\n\n";

PS

但是那很慢。有没有更快的方法?

虽然不了解有关“慢”意味着什么的更多细节,但很难讨论细节。我只能说,我希望初始化只会比分配单元化元素然后setZero()更快。


0
投票

首先,Eigen::Matrix<int,30,150>默认情况下将对齐为16个字节,这在64位系统或C ++ 17上最有可能正常工作,但否则可能会遇到some caveats。解决与对齐有关的任何问题的简单方法是编写

© www.soinside.com 2019 - 2024. All rights reserved.