使用Python
一般资料
*Python*是一种高级解释型通用编程语言。 在本文中,我们将看看Python在*Engee*平台中的使用,即:
-
Python通过PyCall集成.jl包-使用PyCall包在*Engee*脚本中编写Python代码;
-
使用交互式Engee脚本时的功能—学习使用*Engee*scripts的细节并安装必要的Python包;
-
在Engee环境中使用Python变量—在*Engee脚本中使用Python变量*;
-
在Engee中启动Python笔记本-通过将它们直接从外部开发环境传输到*Engee*来运行您自己的Python笔记本电脑;
-
Python神经网络及其与Engee模型的集成—使用基于Engee模型的Python库创建和训练神经网络。
在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命令,例如
%运行.
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代码中参考:

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

| 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*中使用 脚本编辑器
Engee。 为此,请打开编辑器,单击*+*,然后*创建脚本*并选择格式。ipynb:
→ 
-
安装在*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*中进行神经网络训练的另一个示例,请转到 链接。