【问题标题】:Memory efficiency when needing to do matrix operations需要进行矩阵运算时的内存效率
【发布时间】:2013-07-14 19:23:03
【问题描述】:

我正在从事物理研究,并参加了 C++ 入门课程。对于我的研究,我需要对 3N x 3N 的非常大的矩阵进行计算并将它们相乘,其中 N 可能超过 100。我使用多维数组制作了一个工作代码,但是当我从文件(它是一个非常大的文件),程序崩溃,我知道它适用于较小的矩阵,因为我已经测试过它。我在网上环顾四周,很多人都提到在 C++ 中使用矩阵类,但这更有效吗?而且,我没有复习 C++ 课程中的课程,所以我一直在网上阅读一些教程,但我似乎无法理解它们对矩阵的帮助。因此,如果它们比多维数组更有效,那么有人可以发布一个带有一类矩阵的代码的小示例,这样我就可以看到如何做到这一点。谢谢

【问题讨论】:

  • 在网上搜索“C++ FAQ Matrix”,它会给出一个矩阵类的例子。

标签: c++ class matrix


【解决方案1】:

你有没有课程的 C++ 课程?!这是它从 C 演变而来的特性。一个工作名称是“C with classes”。每个带有矩阵的优秀 C++ 库都会大量使用它们和模板。

如果您将它用于研究,我真的建议您使用库。您只需要学习如何使用它,并且可以依靠正确性和最佳效率。

有很多,我不能真正推荐一个,因为我从来没有使用过适合你的目的,但我听说Eigen 会很好地解决问题。

【讨论】:

  • 我使用过 Eigen 并且会说它是一个很好的库(也只有标题!)。对 C++ 线性代数库 here 有很好的讨论。
【解决方案2】:

您可能希望使用std::vector 而不是数组。

数组的问题是您需要事先知道大小。对于大型或巨大的数组,您可能需要从动态内存中分配它们,而不是将它们声明为静态或全局。一些编译器对全局内存量有限制。

std::vector 将按需增长,您无需担心调整数组大小。

【讨论】:

    猜你喜欢
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多