ipython和ipython笔记本之间存在奇怪的精度差异,然后使用带有f2py的fortran模块
在使用用f2py编译的fortran模块时,我遇到了ipython和ipython笔记本之间奇怪的精度差异 我的fortran模块是:ipython和ipython笔记本之间存在奇怪的精度差异,然后使用带有f2py的fortran模块,python,fortran,ipython,f2py,Python,Fortran,Ipython,F2py,在使用用f2py编译的fortran模块时,我遇到了ipython和ipython笔记本之间奇怪的精度差异 我的fortran模块是: subroutine tt(string,fmt,n_num,out) implicit none INTEGER,INTENT(IN)::n_num CHARACTER(LEN=*),INTENT(IN)::string CHARACTER(LEN=*),INTENT(IN)::fmt DOUBLE PRECISION,INTENT(OUT
subroutine tt(string,fmt,n_num,out)
implicit none
INTEGER,INTENT(IN)::n_num
CHARACTER(LEN=*),INTENT(IN)::string
CHARACTER(LEN=*),INTENT(IN)::fmt
DOUBLE PRECISION,INTENT(OUT)::out(n_num)
read(string,fmt) out
end subroutine tt
编译时使用:f2py-c-m andre tt.f90
在ipython,我得到:
In [1]: import numpy as np
In [2]: import andre
In [3]: out = np.array(andre.tt(' 0.34 4.56 5.67','(3f5.2)',3),dtype=np.float)
In [4]: print out
[ 0.34 4.56 5.67]
这是期望的输出。然而,在ipython笔记本中,使用相同的代码,我得到:
print out
print out+0.0001
[ 0. 4. 5.]
[ 1.00000000e-04 4.00010000e+00 5.00010000e+00]
我做错了什么?您是否尝试执行
打印(repr(out[0]))
以查看更多的数字?也许只是ipython笔记本在显示结果方面有一套不同的选项,这就是我在第二个print语句中尝试看到的。我测试了你的建议:print(repr(out[0])
这给了我0.0
。所以,似乎有什么东西留在了某处。ipython笔记本是否应该与这些模块一起工作?或者有一些ZMQ限制?你能检查一下ipython笔记本和ipython的numpy版本吗?(打印np.\uuuuuuuuuuuuuuuuu版本
)。它们是一样的吗?(我对ipython
及其工作原理一无所知)。它们都是1.7.0
版本。我正在使用64位版本制作Fedora 18盒。我可以检查一下我是否在Firefox/Chrome/Opera中看到相同的结果。->我在Firefox和Google Chrome中看到了相同的行为。而且,在我看来,您的fortran格式是错误的。它不应该是”(3(1X,f4.2))”
?(尽管如此,如果是这样的话,ipython和ipython笔记本应该处理相同的问题…)