Engee 文档

使用Python

一般资料

*Python*是一种高级解释型通用编程语言。 在本文中,我们将看看Python在*Engee*平台中的使用,即:

在Engee中调用Python

Python通过PyCall集成.jl套件

PyCall。jl*是一个Julia包,允许您直接在Julia代码中从Python调用函数和对象。 它提供了Julia和Python之间的接口,并允许您导入Python模块,调用它们的函数,创建对象,并在Julia中使用它们编写代码。 有关Julia中支持的Python调用命令、文字和包的更多信息,请参阅文章 PyCall.jl。 *PyCall默认内置于Engee中,无需安装或导入。

*Engee*使用计算核心 Julia,但您可以使用以下方法在Engee脚本中编写Python代码(请参阅使用交互式Engee脚本时的功能):

  • 用字符串字面量`py"""包装Python代码。.."""'基于PyCall包。 该字面量将字符串作为Python程序代码执行,而不返回值并执行传递的代码。

  • 用字符串字面值`py"包装Python代码。.."'基于PyCall。 该字面量将字符串作为参数,并将其作为Python表达式执行。

  • 使用命令’pyimport`,'pyeval`,pycall@pycallpybuiltin@pywith@pyinclude,`@pysym','@pydef'。

让我们用例子来看看这些方法。

您可以使用熟悉的Python语法在Julia中编写代码。 要做到这一点,用文字`py"""包装你的Python代码。.."""`和’py"。.."',例如:

py""" # 转换为字面量
import numpy as np # 导入numpy包
"""
a = py"np.zeros(2)" # 转换为字面量,创建一个由两个元素组成的填充为零的一维数组

对于pyimport命令,代码如下所示:

np = pyimport("numpy")
a = np.zeros(2)

在这两个例子中,变量’a’将具有相同的值。 示例之间的区别在于,在pyimport命令的情况下,Julia中出现了一个可以直接访问的np对象。

在Julia中,像`import numpy as np`这样的Python命令在本机上不起作用,但是使用字符串字面量可以将Python代码直接插入Julia代码,前提是安装了PyCall包。

您还可以在Julia中使用其他Python调用命令。:

  • pyimport-将Python模块导入Julia,允许您在Julia代码中使用其函数和变量。

  • 'pyeval—-在Julia上下文中执行Python字符串代码,返回执行结果。

  • 'pycall'-从Julia调用带有指定参数的Python函数。

  • '@pycall’是一个宏,它提供了从Julia调用Python函数的方便语法。 它通常比`pycall`更常用,因为调用更简单。

  • 'pybuiltin—-提供对内置Python函数的访问,如`print`,len,`range`等。

  • `@pywith'—宏创建一个Python执行上下文,您可以在其中使用Julia中的Python代码块。

  • '@pyinclude’是一个宏,它在Julia中包含一个Python代码文件并执行它。

  • '@pysym’是一个宏,它将Julia符号名称转换为相应的Python对象。

  • '@pydef'—创建一个Python类,其方法在Julia中实现。

例如,'pybuiltin’命令:

pybuiltin("print")("Hello, world!")

代码输出消息’你好,世界!`.

使用交互式Engee脚本时的功能

查看在Engee脚本中使用Python的示例*:

您可以熟悉在*Engee*脚本中使用Python的示例。 这里

交互式Engee脚本(与.ngscript扩展)是在Engee环境中处理代码的工具(有关更多信息,请参阅 脚本编辑器). 让我们来看看使用Python的交互式Engee脚本的特性:

  • *Engee*脚本可以直接在*Engee*本身中创建。 这是唯一支持的创建交互式脚本的格式。

  • 在一个*Engee*脚本中添加软件包允许您在其他*Engee*脚本中使用它们,而无需重新安装。

  • Engee脚本支持魔术Python命令,例如`%run'。

要在Engee脚本中使用Python,您可能需要许多包,例如,科学计算支持包。 SciPy。 使用包管理器进行安装。 Pkg和Julia语法:

using Pkg
Pkg.add("SciPy") # 将在Julia中安装SciPy包

要删除软件包,请使用’rm’命令。 例如,'Pkg.rm("冥王星")'。 阅读更多 使用Julia软件包.

要找出在*Engee*脚本中安装了哪些软件包,请使用:

import Pkg
Pkg.status()

让我们举个例子。 要做到这一点,安装SciPy包,并使用它来找到使用字符串字面量`py"""`方程的根:

py"""
from scipy.optimize import root_scalar

def func(x):
    return x**2 - 4

result = root_scalar(func, method='brentq', bracket=[0, 2])

print("结果(方程的根):", result.root)
"""

让我们更详细地分析代码:

  • 在西皮的队伍里。优化import root_scalar`,函数’root_scalar`是从模块’scipy导入的。优化`。 该函数旨在以数值方式找到一个变量的方程根。

  • 在`def func(x):'行中定义了func函数,正在搜索其根。 使用方程的’返回’值 函数返回func,'x’是一个变量。

  • 在字符串’result=root_scalar(func,method='brentq',bracket=[0,2])中,函数’root_scalar’用于查找func函数指定的方程的根。 'Brentq"方法表示我们要具体使用Brent方法。 使用参数’bracket=[0,2],我们设置搜索方程根的间隔(在我们的例子中,从`0`到`2`)。

  • 行’print("Result(root of equation):",result.根)'显示方程的找到的根。 '结果。root’包含’root_scalar’函数找到的根值。

结果,我们找到方程的根 在帮助下 布伦特的方法从SciPy包。 将得到方程根的值:

结果(方程的根):2.0

同样,您可以使用其他Python包,如NumPy,Matplotlib,Pandas等。,但请记住,您不能在*Engee*中创建不同的Python环境并在它们之间切换。

要安装的软件包数量的唯一限制是在*Engee*中为当前会话分配的RAM内存。 阅读更多关于可用内存的信息 启动工程师会议.

在Engee环境中使用Python变量

在Python笔记本(参见在Engee中启动Python笔记本)或使用Python调用的*Engee*脚本中创建的变量将具有PyObject类型。 变量的这种类型是由于Python中的数据类型与Julia不等,并且Python变量被分配自己的唯一类型来保存数据。

您可以通过直接调用方法将Python模块中的变量导入Julia变量。 例如:

math = pyimport("math")
math.sin(math.pi / 4)

结果,我们得到值:`0.7071067811865475'。

在这段代码中,使用PyCall包在Julia中使用命令`math=pyimport("math")`。 它允许您从标准Python包中导入`math`模块,并将其保存在`math`变量中,以便将来在Julia代码中使用。:

python straight method 1 cn

PyObject类型的变量不能导出到。垫格式,但他们可以在.jld2(有关更多信息,请参阅 导入和导出变量:

python variables 1 cn

Python变量无法使用内置的*Engee*工具进行清理,但可以复盖它们。 删除变量需要会话重新启动。

如果需要,PyObject变量可以在Engee脚本中进一步使用,但请记住,Python数据类型与Julia不同。 如果需要类型转换,我们建议您显式指定类型。:

var_jl = py"int(var_py)" # var_py是PyObject类型的变量。
println(var_jl)

其中’var_jl’是Julia变量。 转换后,变量’var_py’保留在PyObject类型中,因此我们从PyObject类型的旧`var_py`在Julia中创建了一个新变量`var_jl`。

您可以使用PyObject类型变量在*Engee*脚本中工作,而无需显式设置它们。 例如,我们有一个PyObject类型的变量`deg'。 我们可以通过`println(deg)命令访问它,例如,添加'10:

println(deg + 10)

# 我们得到PyObject11。

变量保留了它的PyObject类型,我们已经成功地执行了数学运算。

在Engee中启动Python笔记本

你可以下载你的Python笔记本(Jupyter笔记本)到*Engee*并运行它 脚本编辑器。 让我们来看看使用Python笔记本电脑的功能:

  • Python笔记本可以直接在*Engee*中使用 脚本编辑器 interactive script icon Engee。 为此,请打开编辑器,单击*+*,然后*创建脚本*并选择格式。ipynb:

    img36c cnimg36c 1 cn

  • 安装在*Engee*脚本中的软件包不能导入到Python笔记本中。 必须为每台新的Python笔记本电脑重新安装必要的软件包。

  • 从Python笔记本到*Engee*,您无法访问Julia的魔术命令或两个用户输入函数’input`)`和’getpass()'。

  • Python笔记本电脑不支持代码延迟(例如,通过`sleep`功能),并立即输出代码执行的结果。

  • 不能使用Python脚本(.py扩展名)。

  • 不能使用conda包管理工具,只能使用pip。

要在Python笔记本电脑中安装软件包,请使用魔术命令`!皮普`:

!pip install scipy
魔术命令(魔术命令)-各种软件开发工具中的特殊命令。 这些命令旨在执行在交互式编程和数据分析中有用的其他操作。

如有必要,请从WHL文件安装软件包。:

!pip install path/to/file.whl

WHL*是打包和分发Python包的存档格式。 要安装WHL文件,首先将其传输到 文件浏览器 *Engee。 WHL文件包含预编译的二进制包文件,这使得安装和管理项目依赖关系变得更加容易。 您可以在相应Python包的官方网站上找到WHL格式文件。

要找出Python笔记本中安装了哪些软件包,请使用:

!pip list
查看 示例使用。ipynb in*Engee*:

导入自定义模块

为了将模块导入到Python笔记本中,您需要确保将它们的路径添加到"sys"中。径’变量。 默认情况下,此变量包含标准库、已安装包和Python解释器的当前工作目录的路径,而不是脚本所在的目录。 要查找当前目录,您可以使用`os。getcwd()'函数。 如有必要,可以使用"os"更改当前目录。chdir("路径")'。 如果模块位于另一个目录中,则必须将其路径添加到sys。手动路径。 这可以使用命令来完成:

import sys
sys.path.append('/path/to/your/module')

将路径添加到’sys后。路径`,可以导入模块并使用其功能和数据。 如果您尝试从尚未添加到sys的目录导入模块。路径,会出现错误’ModuleNotFoundError'。

Python神经网络及其与Engee模型的集成

查看使用scikit-learn库训练神经网络并从模型生成训练数据的示例:

为了使用Python处理神经网络,Engee在Julia中使用PyCall包和Python调用命令。 例如,对于库 scikit-学习:

# 在Julia中安装sklearn库
using Pkg
Pkg.add("ScikitLearn")

# 从Python导入必要的模块到Julia
@pyimport sklearn.datasets as datasets
@pyimport sklearn.neural_network as nn
@pyimport numpy as np

要了解使用PyCall在*Engee*中进行神经网络训练的另一个例子,请转到 链接