我发现boost :: ublas不能很好地支持逐个元素的操作和操作(但效率很高:))我试图
D = A ^ 2. * B ^ 3. * C.
其中A,B,C都是相同大小的方形矩阵,运算符“ . *”表示逐个元素的运算,^是矩阵的幂 . 有了提升:ublas,我写道
for (int n=0; n<300; n++)
{
for (int k=0; k<300; k++)
{
D(n, k) = pow(abs(A(n, k)), 2)*pow(abs(B(n, k)), 3)*C(n, k);
}
}
在我的程序中,我有许多后续操作,如上所示,无论如何,我可以得到相同的结果,但使用一行代码而不是循环?
另外,我观察到为矩阵或向量的所有元素分配常量似乎无效
boost :: numeric :: ublas :: vector v(100); v = 0.2;
相反,我必须使用循环再次执行赋值,更好的方法来保存一些代码?我的算法很长,并且有很多繁琐的操作,如上所述 . 我尝试了另一个数字库Armadillo,它提供了简单操作的好方法,但它目前没有假设稀疏矩阵(在运行我的代码时会花费大约10倍) .
1 回答
您可以轻松地将常量分配给矢量或矩阵:
常规向量(但不是c_vector或bounded_vector)甚至有一个构造函数:
至于元素操作,您也可以轻松定义自己的元素操作,它只是样板代码,例如绝对权力:):
在此之后你的表达变为: