如何制作C ++数组的动画色彩图?导出到Python并使用\ 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";

对于多维数据结构,您可以轻松地对此进行抽象,以打印类似[ [1,2,3],[4,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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...