Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ipython和ipython笔记本之间存在奇怪的精度差异,然后使用带有f2py的fortran模块_Python_Fortran_Ipython_F2py - Fatal编程技术网

ipython和ipython笔记本之间存在奇怪的精度差异,然后使用带有f2py的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

在使用用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)::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笔记本应该处理相同的问题…)