问题描述
我有一个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