使用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脚本时的功能):
-
用字符串字面量`py"""包装Python代码。.."""'基于PyCall包。 该字面量将字符串作为Python程序代码执行,而不返回值并执行传递的代码。
-
用字符串字面值`py"包装Python代码。.."'基于PyCall。 该字面量将字符串作为参数,并将其作为Python表达式执行。
-
使用命令’pyimport`,'pyeval`,
pycall
,@pycall
,pybuiltin
,@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'。
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代码中使用。:
PyObject类型的变量不能导出到。垫格式,但他们可以在.jld2(有关更多信息,请参阅 导入和导出变量:
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*中使用 脚本编辑器
Engee。 为此,请打开编辑器,单击*+*,然后*创建脚本*并选择格式。ipynb:
→
-
安装在*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*中进行神经网络训练的另一个例子,请转到 链接。