armadillo C++:从数组中初始化矩阵

ND_*_*_27 14 c++ arrays initialization matrix armadillo

我是新手使用犰狳,尽管尝试/搜索相当多,但无法得到以下内容.

我需要执行两个巨大的(动态)数组(不是向量).我决定使用犰狳.我理解如何使用向量初始化arma :: mat,但是我可以使用数组吗?我不明白,因为我在文档中没有看到任何提及.我试图避免出于内部设计原因使用向量.我尝试使用样本数组手动初始化每个元素(作为一个愚蠢但起点).像下面的代码不起作用.

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();
Run Code Online (Sandbox Code Playgroud)

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

A:
        0
B:
  -5.0000
Run Code Online (Sandbox Code Playgroud)

这是可以理解的.任何使用数组初始化arma :: mat或arma :: colvector的工作?提前致谢!

Mar*_* J. 9

假设你的数组v和c是双数组,你可以使用辅助内存构造函数:

犰狳文档:

  • mat(aux_mem*,n_rows,n_cols,copy_aux_mem = true,strict = true)

    使用可写辅助存储器中的数据创建矩阵.默认情况下,矩阵分配自己的内存并从辅助内存中复制数据(为安全起见).但是,如果copy_aux_mem设置为false,则矩阵将直接使用辅助存储器(即不复制).这更快,但除非你知道你在做什么,否则可能很危险!

只有当copy_aux_mem设置为false(即矩阵直接使用辅助存储器)时,strict变量才会生效.如果strict设置为true,则矩阵将在其生命周期内绑定到辅助存储器; 矩阵中的元素数量不能(直接或间接)改变.如果strict设置为false,则矩阵在其生命周期内不会绑定到辅助存储器,即,矩阵的大小可以改变.如果所请求的元素数量与辅助存储器的大小不同,则将分配新存储器并且将不再使用辅助存储器.

  • mat(const aux_mem*,n_rows,n_cols)

通过从只读辅助存储器复制数据来创建矩阵.

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

mat A_Copy(v, SIZE, 1);
mat B_Copy(c, SIZE, 1);
Run Code Online (Sandbox Code Playgroud)

或者,您实际上可以重用已为阵列分配的内存来创建只读矩阵,如下所示:

mat A_InPlace(v, SIZE, 1, /*copy_aux_mem*/false, /*strict*/true);
mat B_InPlace(c, SIZE, 1, /*copy_aux_mem*/false, /*strict*/true);
Run Code Online (Sandbox Code Playgroud)

如果使用向量,这会变得更简单

vec A_Vec_Copy(v, SIZE);
vec B_Vec_Copy(c, SIZE);
Run Code Online (Sandbox Code Playgroud)

要么:

vec A_Vec_InPlace(v, SIZE, false, true);
vec B_Vec_InPlace(c, SIZE, false, true);
Run Code Online (Sandbox Code Playgroud)