如何制作 C++ 数组的动画色彩图?导出到 Python 并使用 \matplotlib?

How can I make animated colormap plot of C++ arrays? Export to Python and use \matplotlib?

我有一个 C++ 代码,它每次都创建一个数组。 (由于速度原因需要 C++——如果直接在 Python 中构建代码,则需要 8 天才能执行。)代码的结构如下所示:

const int StopTime = 10000;

int main(void){
    int Time = 0;
    while(Time<StopTime){
        //Create a 2D array of dimensions 10x10 filled with integers
    }
}

最终结果应该是一个gif动画图,它会显示随后生成的10000个数组的颜色图。我对 Python 的 \matplotlib 包非常熟悉,所以我希望将所有这 10000 个数组保存到某个文件中,然后将其导入到 Python 的代码中,用 \matplotlib 绘制。我该怎么做?或者是否有一些 C++ 库可以在不需要导出数组的情况下提供帮助?越容易理解和学习越好。 (我更喜欢使用 Python。)

我已经看过 https://github.com/lava/matplotlib-cpp 但我什至无法正确安装它。

有经验的人可以帮助我吗?非常感谢!

PS: 我是 C++ 和 Python 的初学者,通过训练成为数学家。

解决此类问题的快速而肮脏的方法通常是从您的主程序生成 python 代码。这是你的 C++ 程序。例如,字符串 [0, 3, 5, 1] 是一个有效的 python 片段,它定义了一个包含四个值的数组。

因此,如果您有 std::array<T,N>T[N]std::vector<T> 数据,您可以很容易地将它们序列化为可用作 python 口译员:

template <typename Os, typename It>
void serialise(Os& os, It begin, It end) {
  os << '[';
  std::string sep;
  for (auto it = begin; it != end; ++it) {
    os << sep << *it;
    sep = ", ";
  }
  os << " ]";
}

你可以用

打电话
std::cout << "data = ";
serialise(std::cout,std::begin(data),std::end(data));
std::cout << "\n";

您可以轻松地将其抽象为 multi-dimensional 数据结构以打印类似 [ [1,2,3], [4,5,6] ].

的内容

然后您可以将您的程序包装成一个小脚本(使用 bash、python 等),并将 C++ 程序的输出添加到您的 matplotlib python 脚本中,然后访问变量 data.

考虑以下粗略的草图,如何使用 bash:

# generate data array
./main > run.py
# add actual python code that accesses data
cat matplot.tmpl.py >> run.py
# run generated python program
python3 run.py