"Julia" (外部计算系统)
更多信息
- 支持 Julia 0.7 及更高版本. ExternalFunction 则需要 Julia 1.2 或更高版本才可支持.
- 可参考在 ExternalEvaluate 中配置 Julia 的工作流程对 Julia 进行配置并在 Wolfram 语言中使用.
ExternalEvaluate 用法
- ExternalEvaluate["Julia",code] 在 Julia REPL 中执行代码字符串并以 Wolfram 语言表达式的形式返回结果.
- ExternalEvaluate["Julia""String",code] 在 Julia REPL 中执行代码字符串并以 Wolfram 语言字符串的形式返回输出.
数据类型
- 支持以下 Julia 内置类型:
-
Bool True | False 布尔 True/False 值 Int8, Int16, Int32, etc. Integer 整数 Float16, Float32, etc. Real 实数 Complex{Float16}, Complex{Float32}, etc. Complex 复数(仅支持从 Julia 返回的复数) String String 字符的字符串 Array List 对象列表 Dict Association 关联数组 Set List 没有重复元素的无序组 Tuple List 固定长度的容器 Date, DateTime ![TemplateBox[{DateObject, paclet:ref/DateObject}, RefLink, BaseStyle -> {3ColumnTableMod}] TemplateBox[{DateObject, paclet:ref/DateObject}, RefLink, BaseStyle -> {3ColumnTableMod}]](Files/Julia.zh/1.png)
日期,日期间隔 NaN Indeterminate 非数字 nothing Null 无返回值
范例
打开所有单元 关闭所有单元基本范例 (1)
ExternalEvaluate["Julia", "2+2"]ExternalEvaluate["Julia", "[1,2,3,4]"]类型 > 并在下拉菜单中选择 Julia 可以获取一个使用 ExternalEvaluate 进行计算的代码单元格:
日期是以 DateObject 表达式的形式从 Julia 返回:
ExternalEvaluate["Julia", "using Dates; DateTime(2022)"]范围 (20)
ExternalEvaluate["Julia", "true || false"]ExternalEvaluate["Julia", "\"hello\" * \" \" * \"world\""]ExternalEvaluate["Julia", "Dict(\"one\"=>1, \"two\"=>2, \"three\"=>3)"]Julia 中的数组以 List 的形式返回:
ExternalEvaluate["Julia", "[1 2 3;4 5 6]"]会话选项 (9)
"ReturnType" (3)
对于 Julia 运算系统,默认的返回类型是 "Expression":
ExternalEvaluate["Julia", "2+2"] === ExternalEvaluate["Julia" -> "Expression", "2+2"]数字、字符串、列表和关联会自动导入 "Expression" 返回类型:
ExternalEvaluate["Julia", "[1, 2, 3]"]MatchQ[%, {__Integer}]返回类型为 "String",通过调用 Julia 函数 repr,返回一个字符串的结果:
ExternalEvaluate["Julia" -> "String", "[1, 2, 'א']"]ExternalEvaluate["Julia", "repr([1, 2, 'א'])"]"Version" (1)
"Evaluator" (1)
"SessionProlog" (1)
"SessionEpilog" (1)
"Prolog" (1)
命令选项 (10)
"Command" (3)
ExternalEvaluate["Julia", "2+2"]ExternalEvaluate["Julia", <|"Command" -> "2+2"|>]使用 File 包装器来运行文件中的代码:
ExternalEvaluate["Julia", {
<|"Command" -> File["ExampleData/add.jl"]|>,
<|"Command" -> "add2(3)"|>
}]ExternalEvaluate["Julia", {
File["ExampleData/add.jl"],
"add2(3)"
}]将代码放入 CloudObject 中:
cloudObj = CloudExport["print(\"Hello World!\")", "Text", CloudObject["hello-world-jl"]]ExternalEvaluate["Julia", <|"Command" -> cloudObj|>]ExternalEvaluate["Julia", cloudObj]"ReturnType" (1)
默认情况下,该命令使用创建会话时指定的 "ReturnType" 执行:
ExternalEvaluate[
{"Julia", "ReturnType" -> "String"},
"Dict('a'=> 2)"
]在命令中指定 "ReturnType" 将覆盖会话的 "ReturnType":
ExternalEvaluate[
{"Julia", "ReturnType" -> "String"},
{
<|"Command" -> "Dict('a'=> 2)"|>,
<|"Command" -> "Dict('a'=> 2)", "ReturnType" -> "Expression"|>
}
]"Arguments" (2)
ExternalEvaluate[
"Julia",
<|"Command" -> "+", "Arguments" -> {0, 5}|>
]ExternalEvaluate[
"Julia",
<|"Command" -> "repr", "Arguments" -> 1|>
]如果你需要传递列表作为第一个参数,该列表必须明确包装在一个额外的列表中:
ExternalEvaluate[
"Julia",
{
<|"Command" -> "repr", "Arguments" -> 1|>,
<|"Command" -> "repr", "Arguments" -> {1}|>,
<|"Command" -> "repr", "Arguments" -> {{1}}|>
}
]你可以在 "Command" 中定义一个函数,然后用 "Arguments" 直接调用它:
ExternalEvaluate[
"Julia",
<|"Command" -> "f(a, b)= a+b", "Arguments" -> {1, 2}|>
]通过使用 Rule 可以达到同样的效果:
ExternalEvaluate[
"Julia",
"f(a, b)= a+b" -> {1, 3}
]你也可以通过创建一个 ExternalFunction 来传递参数:
session = StartExternalSession["Julia"]function = ExternalFunction[session, "f(a, b)= a+b"]function[1, 3]DeleteObject[session]"Constants" (1)
"TemplateArguments" (3)
在运行命令时,你可以内联一个 TemplateExpression:
x = RandomReal[]
ExternalEvaluate["Julia", "1 + <* x *>"]可使用 "TemplateArguments" 对 TemplateSlot 进行填充:
ExternalEvaluate[
"Julia",
<|"Command" -> "2 + ``", "TemplateArguments" -> 1|>
]ExternalEvaluate[
"Julia",
<|"Command" -> "repr(``)", "TemplateArguments" -> 1|>
]如果你需要传递列表作为第一个参数,该列表必须明确用一个额外列表进行包装:
ExternalEvaluate[
"Julia",
{
<|"Command" -> "repr(``)", "TemplateArguments" -> 1|>,
<|"Command" -> "repr(``)", "TemplateArguments" -> {1}|>,
<|"Command" -> "repr(``)", "TemplateArguments" -> {{1}}|>
}
]可为模板槽命名,并使用 Association 来向模板传递命名的参数:
ExternalEvaluate[
"Julia",
<|"Command" -> "collect(range(`start`, `length`, `end`))", "TemplateArguments" -> <|"start" -> 1, "end" -> 10, "length" -> 10|>|>
]应用 (2)
session = StartExternalSession["Julia"];
ExternalEvaluate[session, "using Pkg; Pkg.add(\"Statistics\")"];
mean = ExternalEvaluate[session, "using Statistics; mean"]mean[Range[50]]DeleteObject[session]使用 Julia 中的 OrdinaryDiffEq 程序包解决包解决放射性衰变问题:
session = StartExternalSession["Julia"];
ExternalEvaluate[session, "using Pkg; Pkg.add(\"OrdinaryDiffEq\")"];{t, u} = ExternalEvaluate[session, "using OrdinaryDiffEq
c1 = 5.730
u0=1.0
tspan = (0.0, 1.0)
radioactivedecay(u,p,t) =-c1*u
prob = ODEProblem(radioactivedecay,u0,tspan)
sol = solve(prob,Tsit5())
[sol.t,sol.u]
"];ListLinePlot[Transpose[{t, u}],
PlotLabel -> "Carbon-14 half-life",
PlotStyle -> Red,
Epilog -> Point[Transpose[{t, u}]],
ImageSize -> 400,
Frame -> True,
FrameLabel -> {"Time in thousands of years", "Percentage left"}
]属性和关系 (2)
定义一个调用 Julia 函数的 Wolfram 语言函数:
session = StartExternalSession["Julia"];sqrt = ExternalFunction[session, "sqrt"]sqrt[4]DeleteObject[session]NumericArray 作为一个具有相同元素类型的数组被发送到 Julia:
session = StartExternalSession["Julia"]juliaTypeOf = ExternalFunction[session, "typeof"];juliaTypeOf[NumericArray[Range[100], "UnsignedInteger16"]]DeleteObject[session]相关指南
-
▪
- 外部已诠释的语言接口 ▪
- 外部语言接口
相关的工作流程
- 为 ExternalEvaluate 配置 Julia
历史
2020年引入 (12.1)