gpt4 book ai didi

C++ Armadillo : arrays of indices from 2D-matrix

转载 作者:行者123 更新时间:2023-11-28 01:26:28 25 4
gpt4 key购买 nike

我来自 Python。我有一个用 C++ 处理的线性代数问题,我选择使用 Armadillo 来解决这个问题,因为它宣称自己类似于 MATLAB,因此类似于 SciPy。

我正在寻找一种方法来填充两个矩阵,一个用行,一个用给定形状的二维矩阵的列(在 Python 中,这将是 numpy.indices)。

例如,如果我有一个 4 行/3 列的矩阵形状,我想要构建一个行矩阵:

0 0 0
1 1 1
2 2 2
3 3 3

和一个列矩阵:

0 1 2
0 1 2
0 1 2
0 1 2

为了之后做一些计算。

类似于C++ Armadillo Generate Indices uvec of a given vec or matrix without looping it但使用矩阵而不是一维 vector 。

有没有一种不用太多循环的方法呢?我知道 linspace 可以填充一个 vector ,但我不想循环遍历一堆 vector 以将它们合并到一个矩阵中。我刚刚开始使用 Armadillo ,我还没有真正意识到它的功能(基本上,我只需要矩阵乘积和求逆)。

最佳答案

@茄子。 armadillo 库对于科学计算非常有用并且易于上手。我鼓励通过其文档页面获得家庭armadillo documentation

关于您的特定问题,这是我提出的解决方案:

#include<iostream>
#include<armadillo>

using namespace std;
using namespace arma;

int main(int argc, char **argv)
{
// Create two matrices A and B of shape 4x3 filled with zeros
imat A = zeros<imat>(4, 3);
imat B = zeros<imat>(4, 3);

// Fill each row
for(int i=0; i < 4; i++)
{
A.row(i) = i * ones<ivec>(3).t(); //
}

// Fill each column
for(int i=0; i < 3; i++)
{
B.col(i) = i * ones<ivec>(4);
}
cout << "A = \n" << A << endl;
cout << "B = \n" << B << endl;

return 0;
}

在我的电脑(Mac OSX 和 Ubuntu)上编译是这样的:

g++ -std=c++11 -O2 `pkg-config --cflags --libs armadillo` testArmadillo.cpp -o a.out

然后,我们只需键入以下内容即可运行可执行文件:

./a.out

输出如下:

A =
0 0 0
1 1 1
2 2 2
3 3 3

B =
0 1 2
0 1 2
0 1 2
0 1 2

有关 imativec 的更多信息,请参阅 imativec

关于C++ Armadillo : arrays of indices from 2D-matrix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53543715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com