fortran与x2B之间的冲突;读取名称列表时使用iso_c_绑定(通过ctypes或cython)和matplotlib[仅适用于python Anaconda!!]
[编辑:该问题仅适用于python anaconda,而不适用于standard/usr/bin/python2.7] [仅供参考:对任何试图将fortran与ctypes或cython结合使用的人来说仍然很有用,这要归功于] 当使用python中的fortran代码(使用iso_c_绑定)时,无论是通过ctypes还是cython,我都遇到了matplotlib的一个奇怪的不兼容问题。基本上,如果matplotlib被“激活”(通过%pylab或使用pyplot.plot命令),读取名称列表将忽略任何数字!!i、 e.值9.81被读取为9.00。没有matplotlib,没有问题 我做了 基本上,fortran模块只允许从名称列表中读取双精度参数g,并将其存储为全局模块变量。它还可以将其值打印为字符串,并允许直接从外部设置其值。这包括三个功能:fortran与x2B之间的冲突;读取名称列表时使用iso_c_绑定(通过ctypes或cython)和matplotlib[仅适用于python Anaconda!!],matplotlib,fortran,ctypes,cython,anaconda,Matplotlib,Fortran,Ctypes,Cython,Anaconda,[编辑:该问题仅适用于python anaconda,而不适用于standard/usr/bin/python2.7] [仅供参考:对任何试图将fortran与ctypes或cython结合使用的人来说仍然很有用,这要归功于] 当使用python中的fortran代码(使用iso_c_绑定)时,无论是通过ctypes还是cython,我都遇到了matplotlib的一个奇怪的不兼容问题。基本上,如果matplotlib被“激活”(通过%pylab或使用pyplot.plot命令),读取名称列表将
- 阅读
- 印刷品
- 标准杆
make ctypes
python test_ctypes.py
test_ctypes.py包含:
from ctypes import CDLL, c_double
import matplotlib.pyplot as plt
f = CDLL('./lib.so')
print "Read param and print to screen"
f.read_par()
f.print_par()
# calling matplotlib's plot command seem to prevent
# subsequent namelist reading
print "Call matplotlib.pyplot's plot"
plt.plot([1,2],[3,4])
print "Print param just to be sure: everything is fine"
f.print_par()
print "But any new read will lose decimals on the way!"
f.read_par()
f.print_par()
print "Directly set parameter works fine"
f.set_par(c_double(9.81))
f.print_par()
print "But reading from namelist really does not work anymore"
f.read_par()
f.print_par()
对于输出:
Read param and print to screen
g 9.8100000000000005
Call matplotlib.pyplot's plot
Print param just to be sure: everything is fine
g 9.8100000000000005
But any new read will lose decimals on the way!
g 9.0000000000000000
Directly set parameter works fine
g 9.8100000000000005
But reading from namelist really does not work anymore
g 9.0000000000000000
cython示例也是如此(makeclean;makeCython;pythontest\uCython.py)
是否有人知道发生了什么,或者是否有任何解决办法??我为fortran代码编写包装器的主要原因是能够处理模型、设置参数(通过名称列表)、运行它、绘制结果、设置其他参数等等。所以在我的用例中,这种bug有点违背了交互的目的
非常感谢你的提示
PS:我很高兴在某处提交一个bug,但不知道在哪里(gfortran?matplotlib?以下是我的规范:-操作系统:Ubuntu 14.04 LTS 64位-Python 2.7.8::Anaconda 1.9.1(64位)-matplotlib v1.3.1-编译器:gcc版本4.8.2(Ubuntu 4.8.2-19ubuntu1)我无法使用64位Python 2.7.6系统和主repo(不是Anaconda)的软件包在Ubuntu 14.04中重现这个问题。你确定8号机组可以免费使用吗?@VladimirF:8236号机组仍然存在问题…@eryksun我在Anaconda外部安装了matplotlib,错误消失了…好的,谢谢你的建议。这和恼人的Ctrl+C在Anaconda的ipython中不起作用有点令人失望。。。