我正在 Python 中创建有限元代码,该代码依赖于 numpy 和 scipy 进行数组、矩阵和线性代数计算。最初生成的代码似乎正在工作,我得到了我需要的结果。
但是,对于其他一些功能,我需要调用一个多次执行分析的函数,当我查看结果时,它们与第一次调用完全不同,尽管两者都是使用相同的输入调用的。我唯一能想到的是垃圾收集不起作用并且内存正在损坏。
这里是使用的过程:
- 调用设置文件生成模型数据库:mDB = F0(inputs)
- 使用一些变量输入调用第一个分析:r1 = F1(mDB, v1)
- 使用第 2 步中的相同变量重复第一次分析:r2 = F1(mDB, v1)
由于没有任何变化,我希望步骤#2 和步骤#3 的结果是相同的,但是,我的代码产生不同的结果(使用 matplotlib 验证)。
我正在使用:
Windows 7 上的 Python 2.7(32 位),带有 numpy-1.6.2 和 scipy-0.11.0
最佳答案
如果您的结果对舍入误差敏感(例如,您的代码中有一些编程错误),那么通常浮点结果是不可重现的。由于现代编译器优化代码的方式已经发生这种情况,因此它不需要例如访问未初始化的内存。
请参阅: http://www.nccs.nasa.gov/images/FloatingPoint_consistency.pdf
另一种可能的可能性是您的计算函数修改了输入数据。 您在上面评论中提到的观点并不排除这种可能性, 因为 Python 是按引用传递的。
关于python - numpy 和 scipy 结果不规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13871466/