c++ - Armadillo ,如何增长 vector 并获得他的大小?

标签 c++ linux linear-algebra armadillo

在我的最后一个问题中,Ilmari Karonen 建议我在离散模式下求解 Laplace 方程。我在每个节点使用网格和四个最近的邻居来计算未知高度。

enter image description here

所以要求解的系统可以写成矩阵:

A(矩阵 nxn)* U( vector n,未知数)= b( vector n,已结算)

昨晚我在网上浏览了有关 C++ 线性代数的信息。我的选择是Armadillo .但现在 "U"和 "b"是 std::map :

std::map<std::pair<float,float>,float> b;
std::map<std::pair<float,float>,float> U;
.
.
.
if(g/*grid*/->getNode(r,c)->status == TO_COMPUTE){
          U.insert(std::make_pair(std::make_pair(r,c),g->getNode(r,c)->y));
          /*right*/ if(g->getNode(r+1,c)->status == SETTLED) b.at(std::make_pair(r,c)) += g >getNode(r+1,c)->y;
          /*left */ if(g->getNode(r-1,c)->status == SETTLED) b.at(std::make_pair(r,c)) += g->getNode(r-1,c)->y;
          /*down */ if(g->getNode(r,c+1)->status == SETTLED) b.at(std::make_pair(r,c)) += g->getNode(r,c+1)->y;
          /*up   */ if(g->getNode(r,c-1)->status == SETTLED) b.at(std::make_pair(r,c)) += g->getNode(r,c-1)->y;
        }

然后我想我必须获得“U”的大小来创建 arma::vec 并使用 std::iterator 解析整个 map 传输我的 arma::vec 中的值。所以我想知道如何培养 arma::vec 我正在寻找类似 std::vector::push_back() 的东西,然后我将替换我的std::map。另外,如何获取 arma::vec 的大小?

注意 1:图片显示了轮廓和我将计算值的点,未知值的网格在 y=0,当下轮廓在 y=-0.2 和上轮廓在 y=0.8

注意 2:当我的小 (LINUX) 程序准备就绪时,我将在我的 bitbucket 上发布代码,作为使用离散 Laplace 运算符的一个非常小的例子

2013 年 11 月 26 日更新:

您可以获得代码的链接 here

最佳答案

查看 Armadillo 的 documentation .例如,您可以使用 X.n_elem获取 vector X 的长度。要在保留数据的同时调整 vector 的大小,请使用 .resize() .要向矩阵添加行或列,请使用 .insert_rows() or .insert_cols() .

请注意,在性能关键循环(无论是 Armadillo 矩阵/vector 还是 std::vector)中调整对象的大小效率不高。最好事先计算出正确的尺寸。

关于c++ - Armadillo ,如何增长 vector 并获得他的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20149427/

相关文章:

linux - 从 stdin 将数据压缩到现有的 zipfile 子目录中

mysql - 如何更改MySQL错误日志文件格式

python - python中稀疏矩阵的矩阵幂

math - Clojure 矩阵表示

c++ - 为什么在模板评估的第一阶段确定名称的类型,即使是从属名称?

c++ - 在 Windows C++ 中从 JPG/PNG 文件创建 BITMAPINFO

c++ - 取消引用映射迭代器时返回对临时对象的引用

c++ - 如何使用 Boost Hana 删除元编程递归

linux - 以 root 身份运行通知发送

python - 加速 Kronecker 产品 Numpy