犰狳,如何增长一个向量并获得他的大小?

Posted

技术标签:

【中文标题】犰狳,如何增长一个向量并获得他的大小?【英文标题】:Armadillo, how to grow a vector and get his size? 【发布时间】:2013-11-22 16:11:55 【问题描述】:

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

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

A(矩阵nxn)* U(向量n,未知数)= b(向量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 解析整个地图以传输我的arma::vec 中的值。所以我想知道如何发展arma::vec 我正在寻找类似std::vector::push_back() 的东西,然后我将替换我的std::map。另外我如何获得arma::vec 的大小?

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

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

2013 年 11 月 26 日更新:

你可以得到代码here的链接

【问题讨论】:

pair&lt;float,float&gt; 索引的map&lt;&gt;?您可能想阅读本文以获取一些提示,以了解如何合理地使其工作(尤其是 Yakk 的示例):***.com/questions/6684573/… 如果,也就是说,您真的想要按浮点数对进行索引。 我明白了,通常我使用std::pair&lt;int,int&gt; 我意识到我在考虑int 我什至写了+1-1 而不是+1.0f-1.0f。感谢您指出了这一点。如果没有办法增加arma::vec,我会在没有std::map 的情况下重写它,但我会创建一个结构以便更好地使用和阅读 对于性能关键代码,像 std::vector::push_back() 这样的函数效率不是很高。迟早 std::vector 将需要重新分配内存并复制所有数据。首先计算出所需的尺寸会更有效。 【参考方案1】:

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

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

【讨论】:

以上是关于犰狳,如何增长一个向量并获得他的大小?的主要内容,如果未能解决你的问题,请参考以下文章

犰狳中的矩阵(向量)在从文件加载后获得新的小数位

如何获得固定大小的 SIFT 特征向量?

如何将向量转换为犰狳矩阵?

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

如何将值附加到犰狳矩阵?

如何使用单词的向量表示(从Word2Vec等获得)作为分类器的特征?