gpt4 book ai didi

python - 在我的程序中使用 "from __future__ import division",但它没有与我的程序一起加载

转载 作者:IT老高 更新时间:2023-10-28 21:13:51 29 4
gpt4 key购买 nike

我在 Python 2 中编写了以下程序来为我的数学问题集进行牛顿方法计算,虽然它运行良好,但由于我不知道的原因,当我最初使用 %run -i NewtonsMethodMultivariate 将它加载到 ipython 中时.py,不导入 Python 3 分区。我知道这一点,因为在我加载 Python 程序后,输入 x**(3/4) 会给出“1”。手动导入新的部门后,x**(3/4) 仍然是 x**(3/4),如预期的那样。这是为什么呢?

# coding: utf-8
from __future__ import division
from sympy import symbols, Matrix, zeros

x, y = symbols('x y')
X = Matrix([[x],[y]])
tol = 1e-3

def roots(h,a):
def F(s):
return h.subs({x: s[0,0], y: s[1,0]})
def D(s):
return h.jacobian(X).subs({x: s[0,0], y: s[1,0]})
if F(a) == zeros((2,1)):
return a
else:
while (F(a)).norm() > tol:
a = a - ((D(a))**(-1))*F(a)
print a.evalf(10)

我会使用 Python 3 来避免这个问题,但我的 Linux 发行版只为 Python 2 提供 SymPy。感谢任何人都可以提供的帮助。

另外,如果有人想知道,我还没有为 nxn Jacobians 推广这个脚本,只需要处理我的问题集中的 2x2。 此外,我正在对 2x2 零矩阵进行切片,而不是使用命令 zeros(2,1) 因为安装在我的机器上的 SymPy 0.7.1 提示“zeros()一个论点”,尽管 wiki否则建议。也许此命令仅适用于 git 版本。(感谢 eryksun 更正了我的符号,它解决了 zeros 函数的问题。)

最佳答案

ipython -i 命令和 ipython 解释器中的 run -i 都忽略 from __future__ import division in print05.py 脚本。

$ cat print05.py 
from __future__ import division
print(1/2)

ipython 控制台中:

In [1]: print 1/2
0
In [2]: run -i print05.py
0.5
In [3]: division
Out[3]: _Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)
In [4]: print 1/2
0
In [5]: from __future__ import division
In [6]: print 1/2
0.5

execfileimport 产生相同的结果:

>>> print 1/2
0
>>> execfile('print05.py')
0.5
>>> print 1/2
0
>>> from __future__ import division
>>> print 1/2
0.5

from __future__ import division 不应该对来自不同模块的源代码产生影响,否则会破坏其他模块中的代码,而不是预期它的存在。

这里,from __future__ import Division有效果:

$ python -i print05.py
0.5
>>> print 1/2
0.5
>>> division
_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)

本例中的模块名称在 print05.py 和提示符中都是 __main__

这里,第一个 print 1/2print05 模块中执行,第二个在 __main__ 模块中执行,因此它也可以按预期工作:

$ python -im print05
0.5
>>> print 1/2
0

这里出了点问题:

$ ipython -i print05.py
0.5
In [1]: division
Out[1]: _Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)
In [2]: print 1/2
0

__future__ 的文档说:

If an interpreter is started with the -i option, is passed a script name to execute, and the script includes a future statement, it will be in effect in the interactive session started after the script is executed.

因此,如果 -i 选项试图模拟相同的 python 选项,则可能是 ipython 中的错误。

关于python - 在我的程序中使用 "from __future__ import division",但它没有与我的程序一起加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8290636/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com