【发布时间】:2012-02-19 02:11:59
【问题描述】:
SO中的这个线程是关于c+中的多维数组+。
我必须将一些代码从 c# 移植到 cpp。我有这样的代码:
private double[,] B;
...
this.B = new double[states, symbols];
double[][, ,] epsilon = new double[N][, ,];
double[][,] gamma = new double[N][,];
...
s += gamma[i][t, k] = ...
我曾想过使用普通的数组的双数组,但这很痛苦。另一种解决方案可能是 vector of vector of double 或 自定义 Matrix2D 和 Matrix3D 类?
每种情况的最佳方法是什么?
我学到了什么:
c++ 中的多维数组是一个很棒的话题,互联网上到处都是资源。它可以通过多种方式处理,其中一些非常棘手,另一些则编写起来更快。
我认为处理它的最好方法是使用一些考虑到该主题的库。其中有很多:Armadillo(漂亮的 MATLAB 语法转换),Eigen 我认为是更好的之一,易于安装,易于使用,功能强大。 Boost::multi_array 是另一个人,而 Boost 确实是一个著名的库,重要的是看看它是如何处理这个话题的。 Konrad Rudolph answer STD with nested vectors 或 this 可能是另一种解决方案,但经过一番搜索后,我认为在没有外部库的情况下,代码越简单快捷。
编写自定义类。也许这样一个很好的练习。 peter answer 或 this 或 this 是一个很好的起点,this post 也很有趣,但特别是 great post blog from martin moene(我今天读过的关于这个主题的最佳文章之一)。我还提到了sparse array 的这个答案。
这是直接来自 stroustrup 的nice tutorial
与多维数组共度美好时光 :-)
【问题讨论】:
-
最后,我使用了 boost,因为它已经集成到我正在使用的框架中了!
标签: c# c++ multidimensional-array