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脚本时的功能):

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

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

  • 使用命令 [医]皮姆波特, [医]皮瓦尔, 碧球,碧球, @pycall, [医]皮布尔丁, @pywith, @pyinclude, @pysym, @pydef.

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

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

py""" # обоpачиваet в лиtepал
import numpy as np#导入numpy包
"""
a = py"np.zeros(2)" # обоpачиваet в лиtepал, в kоtоpоm cоздаet одноmepный 数组 和з двyх элemeнtов, заpолнeнный нyляm和

对于团队 [医]皮姆波特 代码将如下所示:

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

在这两个例子中,变量 a 它们将具有相同的值。 示例之间的区别在于,在命令的情况下 [医]皮姆波特 Np对象出现在Julia中,可以直接访问。

在Julia中,Python命令按类型 将numpy导入为np 它们本身不起作用,但使用字符串文字,您可以将Python代码直接嵌入到Julia代码中,前提是安装了PyCall包。

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

  • [医]皮姆波特 -将Python模块导入Julia,允许您在Julia代码中使用其函数和变量。

  • [医]皮瓦尔 -在Julia上下文中执行Python字符串代码,返回执行结果。

  • 碧球,碧球 -从Julia调用带有指定参数的Python函数。

  • @pycall -一个宏,提供了从Julia调用Python函数的方便语法。 它通常比使用更频繁 碧球,碧球 因为更简单的挑战。

  • [医]皮布尔丁 -提供对内置Python函数的访问,例如 印刷业, , 范围 等。

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

  • @pyinclude -在Julia中包含Python代码文件并执行它的宏。

  • @pysym -将Julia符号名称转换为相应Python对象的宏。

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

例如,命令 [医]皮布尔丁:

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

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

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

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

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

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

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

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

  • Engee脚本支持魔术Python命令,例如 %运行.

要在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)
"""

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

  • 排在队伍里 来自scipy。优化导入root_scalar 正在导入函数 根_scalar 从模块 希皮。优化. 该函数旨在以数值方式找到一个变量的方程根。

  • 排在队伍里 def func(x): 定义了func函数,正在为其搜索根。 通过 回来吧 方程的值 func函数返回,并 x -一个变量。

  • 排队 结果=root_scalar(func,方法='brentq',括号=[0,2]) 功能 根_scalar 它用于找到func函数给出的方程的根。 方法 '布伦特克' 表示我们要具体使用Brant方法。 使用参数 括号=[0,2] 我们设置搜索方程根的间隔(在我们的例子中,从 0 以前 2).

  • 排在队伍里 print("结果(方程的根):",结果。根) 求出方程的根。 结果。根 包含函数找到的根值 根_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.

在这段代码中,命令 math=pyimport("数学") 它在Julia中使用PyCall包。 它允许您导入模块 数学 从标准Python包并将其保存在变量中 数学 以供日后在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 -朱莉娅变量。 转换后,变量 var_py 它仍然是PyObject类型,所以我们创建了一个新变量。 var_jl 在旧的朱莉娅 var_py PyObject类型的。

您可以在*Engee*脚本中使用PyObject类型变量,而无需显式指定它们。 例如,我们有一个变量 戴格 使用PyObject类型。 我们可以通过指挥部联系她 打印(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的魔术命令和两个用户输入功能。 – 输入()getpass().

  • Python笔记本电脑不支持代码延迟(例如,通过函数 睡觉)并即时输出代码执行的结果。

  • 不能使用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笔记本中,您需要确保将它们的路径添加到变量中。 系统。路径. 默认情况下,此变量包含标准库、已安装包和Python解释器的当前工作目录的路径,而不是脚本所在的目录。 要找出当前目录,您可以使用该函数 操作系统。getcwd(). 如有必要,您可以使用以下方法更改当前目录 操作系统。chdir("路径"). 如果模块位于另一个目录中,则必须将其路径添加到 系统。路径 手动。 这可以使用命令来完成:

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

将路径添加到 系统。路径 该模块可以导入,并可以使用其功能和数据。 如果您尝试从未添加到的目录导入模块 系统。路径,会出现错误 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*中进行神经网络训练的另一个示例,请转到 链接