python - 将 Mathematica 表达式正确导入 Python

标签 python wolfram-mathematica code-formatting

我正在尝试将一个冗长的表达式从 Mathematica 导入到 Python。我将 Mathematica 表达式的 FortranForm 复制粘贴到 Python 中,并将所有行设置为具有相同的缩进。但我收到一个我不明白的错误。我猜测这是缩进的问题,但我不确定。请帮忙。

这是Python代码,带有缩进:

def f2(x,y,z,x1,y1,z1,x2,y2,z2,x3,y3,z3):
    return ((x2*(y - y1) + x*(y1 - y2) + x1*(-y + y2))*(y2 - y3) + (-y1 + y2)*(x3*(-y + y2) + x2*(y - y3) + x*(-y2 + y3)) + 
    (x2*(z - z1) + x*(z1 - z2) + x1*(-z + z2))*(z2 - z3) + (-z1 + z2)*(x3*(-z + z2) + x2*(z - z3) + x*(-z2 + z3)))/
    (np.sqrt((x - x1)**2 + (y - y1)**2 + (z - z1)**2)*((x - x2)**2 + (y - y2)**2 + (z - z2)**2)*np.sqrt((x - x3)**2 + (y - y3)**2 + (z - z3)**2)) - 
    ((x - x3)*((x2*(-y + y1) + x1*(y - y2) + x*(-y1 + y2))*(x3*(-y + y2) + x2*(y - y3) + x*(-y2 + y3)) + 
    (x2*(-z + z1) + x1*(z - z2) + x*(-z1 + z2))*(x3*(-z + z2) + x2*(z - z3) + x*(-z2 + z3)) + 
    (y2*(-z + z1) + y1*(z - z2) + y*(-z1 + z2))*(y3*(-z + z2) + y2*(z - z3) + y*(-z2 + z3))))/
    (np.sqrt((x - x1)**2 + (y - y1)**2 + (z - z1)**2)*((x - x2)**2 + (y - y2)**2 + (z - z2)**2)*((x - x3)**2 + (y - y3)**2 + (z - z3)**2)**1.5) - 
    (2*(x - x2)*((x2*(-y + y1) + x1*(y - y2) + x*(-y1 + y2))*(x3*(-y + y2) + x2*(y - y3) + x*(-y2 + y3)) + 
    (x2*(-z + z1) + x1*(z - z2) + x*(-z1 + z2))*(x3*(-z + z2) + x2*(z - z3) + x*(-z2 + z3)) + 
    (y2*(-z + z1) + y1*(z - z2) + y*(-z1 + z2))*(y3*(-z + z2) + y2*(z - z3) + y*(-z2 + z3))))/
    (np.sqrt((x - x1)**2 + (y - y1)**2 + (z - z1)**2)*((x - x2)**2 + (y - y2)**2 + (z - z2)**2)**2*np.sqrt((x - x3)**2 + (y - y3)**2 + (z - z3)**2)) - 
    ((x - x1)*((x2*(-y + y1) + x1*(y - y2) + x*(-y1 + y2))*(x3*(-y + y2) + x2*(y - y3) + x*(-y2 + y3)) + 
    (x2*(-z + z1) + x1*(z - z2) + x*(-z1 + z2))*(x3*(-z + z2) + x2*(z - z3) + x*(-z2 + z3)) + 
    (y2*(-z + z1) + y1*(z - z2) + y*(-z1 + z2))*(y3*(-z + z2) + y2*(z - z3) + y*(-z2 + z3))))/
    (((x - x1)**2 + (y - y1)**2 + (z - z1)**2)**1.5*((x - x2)**2 + (y - y2)**2 + (z - z2)**2)*np.sqrt((x - x3)**2 + (y - y3)**2 + (z - z3)**2))

这是我得到的错误:

File "<ipython-input-87-f30bebfee3b2>", line 4
x2*(z - z1) + x*(z1 - z2) + x1*(-z + z2))*(z2 - z3) + (-z1 + z2)*(x3*(-z + z2) + x2*(z - z3) + x*(-z2 + z3)))/
SyntaxError: invalid syntax

最佳答案

无效语法是表达式中的换行符。例如,

def invalid_break():
    return 1 /
           2

无效。一个简单的解决方法是将表达式括在括号中:

def valid_break():
    return (1 / 
            2)

参见例如How can I do a line break (line continuation) in Python?为了清楚起见,一种解决方法是将长表达式括在括号中,即

def f2(x,y,z,x1,y1,z1,x2,y2,z2,x3,y3,z3):
        return (((x2*(y - y1) + x*(y1 - y2) + x1*(-y + y2))*(y2 - y3) + (-y1 + y2)*(x3*(-y + y2) + x2*(y - y3) + x*(-y2 + y3)) + 
        (x2*(z - z1) + x*(z1 - z2) + x1*(-z + z2))*(z2 - z3) + (-z1 + z2)*(x3*(-z + z2) + x2*(z - z3) + x*(-z2 + z3)))/
        (np.sqrt((x - x1)**2 + (y - y1)**2 + (z - z1)**2)*((x - x2)**2 + (y - y2)**2 + (z - z2)**2)*np.sqrt((x - x3)**2 + (y - y3)**2 + (z - z3)**2)) - 
        ((x - x3)*((x2*(-y + y1) + x1*(y - y2) + x*(-y1 + y2))*(x3*(-y + y2) + x2*(y - y3) + x*(-y2 + y3)) + 
        (x2*(-z + z1) + x1*(z - z2) + x*(-z1 + z2))*(x3*(-z + z2) + x2*(z - z3) + x*(-z2 + z3)) + 
        (y2*(-z + z1) + y1*(z - z2) + y*(-z1 + z2))*(y3*(-z + z2) + y2*(z - z3) + y*(-z2 + z3))))/
        (np.sqrt((x - x1)**2 + (y - y1)**2 + (z - z1)**2)*((x - x2)**2 + (y - y2)**2 + (z - z2)**2)*((x - x3)**2 + (y - y3)**2 + (z - z3)**2)**1.5) - 
        (2*(x - x2)*((x2*(-y + y1) + x1*(y - y2) + x*(-y1 + y2))*(x3*(-y + y2) + x2*(y - y3) + x*(-y2 + y3)) + 
        (x2*(-z + z1) + x1*(z - z2) + x*(-z1 + z2))*(x3*(-z + z2) + x2*(z - z3) + x*(-z2 + z3)) + 
        (y2*(-z + z1) + y1*(z - z2) + y*(-z1 + z2))*(y3*(-z + z2) + y2*(z - z3) + y*(-z2 + z3))))/
        (np.sqrt((x - x1)**2 + (y - y1)**2 + (z - z1)**2)*((x - x2)**2 + (y - y2)**2 + (z - z2)**2)**2*np.sqrt((x - x3)**2 + (y - y3)**2 + (z - z3)**2)) - 
        ((x - x1)*((x2*(-y + y1) + x1*(y - y2) + x*(-y1 + y2))*(x3*(-y + y2) + x2*(y - y3) + x*(-y2 + y3)) + 
        (x2*(-z + z1) + x1*(z - z2) + x*(-z1 + z2))*(x3*(-z + z2) + x2*(z - z3) + x*(-z2 + z3)) + 
        (y2*(-z + z1) + y1*(z - z2) + y*(-z1 + z2))*(y3*(-z + z2) + y2*(z - z3) + y*(-z2 + z3))))/
        (((x - x1)**2 + (y - y1)**2 + (z - z1)**2)**1.5*((x - x2)**2 + (y - y2)**2 + (z - z2)**2)*np.sqrt((x - x3)**2 + (y - y3)**2 + (z - z3)**2)))

关于python - 将 Mathematica 表达式正确导入 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41454334/

相关文章:

python - 如何使用 basemap 绘制靠近两极的地球观测卫星的视野?

python - 使用 Python comtypes 库将查询表添加到 Excel 时出现问题

Python:获取字典中索引的键

image - 用 Mathematica 中的自定义图像替换像素?

wolfram-mathematica - 在 Simplify 和 Expand 中使用替代特殊函数

python - 如何使 python 代码中的段落可读

python - 在 Windows 下如何共享日志文件?

statistics - DistributionFitTest[] 用于 Mathematica 中的自定义分布

intellij-idea - Intellij在新 block 中添加额外的行

python - 如何在从 docker 容器运行的 jupyter notebooks 中获取黑色代码格式?