我有一个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的代码中,并使用\matplot lib绘制。我该怎么做?或者是否有一些C++库可以在不需要导出数组的情况下提供帮助?越容易理解和学习越好。(我在使用Python时会舒服得多。(
我已经看过了https://github.com/lava/matplotlib-cpp但我甚至无法正确安装它。
能请更有经验的人帮我吗?非常感谢!
附言:我是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,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