使用Python
一般资料
Python*是一种高级解释型通用编程语言。 在本文中,我们将介绍在平台框架内使用Python。 *AnyMath ,即:
Python通过PyCall集成.jl套件—在脚本中编写Python代码 *AnyMath 感谢PyCall套餐; 使用交互式脚本时的功能 AnyMath-了解使用脚本的具体细节 *AnyMath 并安装必要的Python包; [working-with-variables>—-在脚本中使用Python变量 *AnyMath ; <<working-with-python-scripts]-通过将它们传输到 *AnyMath 直接来自外部开发环境; Python神经网络及其与模型的集成 AnyMath—使用基于模型的Python库创建和训练神经网络 *AnyMath .
调用Python AnyMath
Python通过PyCall集成.jl套件
|
PyCall。jl*是一个Julia包,允许您直接在Julia代码中从Python调用函数和对象。 它提供了Julia和Python之间的接口,并允许您导入Python模块,调用它们的函数,创建对象,并在Julia中使用它们编写代码。 有关Julia中受支持的Python调用命令、文字和包的更多信息,请参阅文章 PyCall.jl。 *PyCall默认内置 AnyMath 您不需要安装或导入它。 |
在 AnyMath 使用计算核心 Julia,但您可以在脚本中编写Python代码。 AnyMath (请参阅使用交互式脚本时的功能 AnyMath)使用以下方法:
*用字符串文字包装Python代码 py"""。..""" 基于PyCall包。 该字面量将字符串作为Python程序代码执行,而不返回值并执行传递的代码。
*用字符串文字包装Python代码 py"。.." 基于PyCall。 该字面量将字符串作为参数,并将其作为Python表达式执行。
*使用命令 [医]皮姆波特, [医]皮瓦尔, 碧球,碧球, @pycall, [医]皮布尔丁, @pywith, @pyinclude, @pysym, @pydef.
让我们来看看这些方法使用的例子。
您可以使用熟悉的Python语法在Julia中编写代码。 要做到这一点,用文字包装你的Python代码。 py"""。..""" 和 py"。.." 例如:
py""" # 包装为字面量
import numpy as np#导入numpy包
"""
a = py"np.zeros(2)" # 包装为字面量,在其中创建由两个零元素组成的一维数组
对于团队 [医]皮姆波特 代码将如下所示:
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!")
代码输出消息 你好,世界!.
使用交互式脚本时的功能 AnyMath
|
查看在脚本中使用Python的示例 AnyMath : |
| 请参阅在脚本中使用Python的示例 AnyMath 你可以 这里。 |
交互式脚本 AnyMath (与。ngscript扩展)是一个在环境中处理代码的工具 AnyMath (详情请参阅 脚本编辑器). 让我们来看看使用交互式脚本的功能 AnyMath 对于Python:
脚本 *AnyMath 可直接在 AnyMath . 这是唯一支持的创建交互式脚本的格式。
在一个脚本中添加包 *AnyMath 允许您在其他脚本中使用它们 AnyMath 无需重新安装。
脚本 *AnyMath 支持魔术Python命令,例如 %运行.
using Pkg
Pkg.add("SciPy") # 将在Julia中安装SciPy包
要删除包,请使用以下命令 rm. 例如, Pkg。rm("冥王星"). 阅读更多 使用Julia软件包.
找出脚本中安装了哪些软件包 AnyMath ,使用:
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等。,但请记住,在 AnyMath 您无法创建不同的Python环境并在它们之间切换。
| 要安装的软件包数量的唯一限制是为当前会话分配的RAM内存 AnyMath . 阅读更多关于可用内存的信息 启动工程师会议. |
在环境中使用Python变量 AnyMath
在Python笔记本中创建的变量(请参阅在运行Python笔记本 AnyMath)或在脚本中创建的变量 AnyMath 通过调用Python,它们将具有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变量无法使用内置工具进行清理。 AnyMath ,但可以复盖。 删除变量需要会话重新启动。 |
如果需要,PyObject变量可以在脚本中进一步使用。 AnyMath ,但请记住,Python的数据类型与Julia的不同。如果需要类型转换,我们建议您显式指定类型。:
var_jl = py"int(var_py)" # var_py是PyObject类型的变量。
println(var_jl)
哪里 var_jl -朱莉娅变量。 转换后,变量 var_py 它仍然是PyObject类型,所以我们创建了一个新变量。 var_jl 在旧的朱莉娅 var_py PyObject类型的。
您可以在脚本中工作 AnyMath 使用PyObject类型的变量,而不显式指定它们。 例如,我们有一个变量 戴格 使用PyObject类型。 我们可以通过指挥部联系她 打印(deg),并且,例如,添加 10:
println(deg + 10)
# 我们得到PyObject11。
变量保留了它的PyObject类型,我们已经成功地执行了数学运算。
在运行Python笔记本 AnyMath
您可以上传到 AnyMath 你的Python笔记本电脑(Jupyter笔记本),并运行它 脚本编辑器。 让我们来看看使用Python笔记本电脑的功能:
Python笔记本可以直接在 *AnyMath 使用 脚本编辑器
AnyMath . 为此,请打开编辑器,单击*+*,然后*创建脚本*并选择格式。ipynb:
+
→ 
安装在脚本中 *AnyMath 包不能导入到Python笔记本中。 必须为每个新的Python笔记本电脑重新安装必要的软件包。
从Python笔记本到 *AnyMath Julia的魔术命令和两个用户输入功能无法访问 – 输入() 和 getpass().
*Python笔记本电脑不支持代码延迟(例如,通过函数 睡觉)并即时输出代码执行的结果。
*不能使用Python脚本(.py扩展名)。
*不能使用conda包管理工具,只能使用pip。
要在Python笔记本中安装软件包,请使用魔术命令 !皮普:
!pip install scipy
| 魔术命令(魔术命令)-各种软件开发工具中的特殊命令。 这些命令旨在执行在交互式编程和数据分析中可能有用的其他操作。 |
如有必要,请从WHL文件安装软件包。:
!pip install path/to/file.whl
WHL*是打包和分发Python包的存档格式。 要安装WHL文件,请先将其传输到 文件浏览器 *AnyMath . WHL文件包含预编译的二进制包文件,这使得安装和管理项目依赖关系变得更加容易。 您可以在相应Python包的官方网站上找到WHL格式文件。
要找出Python笔记本中安装了哪些软件包,请使用:
!pip list
| 查看 示例使用。ipynb在 AnyMath : |
导入自定义模块
为了将模块导入到Python笔记本中,您需要确保将它们的路径添加到变量中。 系统。路径. 默认情况下,此变量包含标准库、已安装包和Python解释器的当前工作目录的路径,而不是脚本所在的目录。 要查找当前目录,您可以使用该函数 操作系统。getcwd(). 如有必要,您可以使用以下方法更改当前目录 操作系统。chdir("路径"). 如果模块位于另一个目录中,则必须将其路径添加到 系统。路径 手动。 这可以使用命令来完成:
import sys
sys.path.append('/path/to/your/module')
将路径添加到 系统。路径 该模块可以导入,并可以使用其功能和数据。 如果您尝试从尚未添加到的目录导入模块 系统。路径,会出现错误 ModuleNotFoundError.
Python神经网络及其与模型的集成 AnyMath
|
查看使用scikit-learn库训练神经网络并从模型生成训练数据的示例: |
使用Python在 AnyMath 使用了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
参见神经网络训练的另一个例子 AnyMath 使用PyCall,您可以 链接。