我是不熟悉armadillo的新手,尽管尝试/搜索了很多内容,但还是无法获得以下内容。

我需要对两个巨大的(动态)数组(而不是 vector )进行关联。我决定为此使用 Armadillo 。我了解如何使用 vector 初始化arma::mat,但是可以使用数组来初始化吗?我不了解,因为在documentation中没有看到任何提及。
由于内部设计原因,我试图避免使用 vector 。
我尝试使用示例数组(作为愚蠢的起点)手动初始化每个元素。类似于以下代码的内容将无法正常工作。

using namespace std;
using namespace arma;

mat A(SIZE, 1), B(SIZE, 1);

for(int i = 0; i < SIZE; i++)
{
    A << v[i] << endr;
    B << c[i] << endr;
}

cout << "A: " << endl;
A.print();
cout << "B: " << endl;
B.print();

对于输入数组v = {1,2,0,-1,.9}和c = {0,.5,1,-2,-5}。输出将是:
A:
        0
B:
  -5.0000

这是可以理解的。
用数组初始化arma::mat或arma::colvector的方法是否可行?提前致谢!

最佳答案

假设数组v和c是 double 数组,则可以只使用aux内存构造函数:
the armadillo doc:

这意味着您可以通过复制源数据来创建矩阵,如下所示:

mat A_Copy(v, SIZE, 1);
mat B_Copy(c, SIZE, 1);
或者,您实际上可以重用已经为数组分配的内存,以创建只读矩阵,如下所示:
mat A_InPlace(v, SIZE, 1, /*copy_aux_mem*/false, /*strict*/true);
mat B_InPlace(c, SIZE, 1, /*copy_aux_mem*/false, /*strict*/true);
如果使用 vector ,这将变得更加简单
vec A_Vec_Copy(v, SIZE);
vec B_Vec_Copy(c, SIZE);
要么:
vec A_Vec_InPlace(v, SIZE, false, true);
vec B_Vec_InPlace(c, SIZE, false, true);

关于c++ - Armadillo C++ : matrix initialization from array,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19370110/

10-12 20:40