如何从Julia中运行的脚本请求用户输入?在MATLAB中,我会这样做:
result = input(prompt)
Run Code Online (Sandbox Code Playgroud)
谢谢
我找到了一个 Julia 函数,可以很好地完成我需要的工作。如何快速集成它以便能够从 Python 调用它?
假设函数是
f(x,y) = 2x.+y
Run Code Online (Sandbox Code Playgroud)
从 Python 中使用它的最佳和最优雅的方法是什么?
我安装了Julia studio 0.4.4,发现它不支持多行注释,#=...=#所以我想找到它正在运行的Julia版本.
在Matlab中,一种类型的命令ver不仅显示了matlab的版本号,还显示了所有安装的工具箱的版本号.
我用谷歌搜索了一段时间,但无法为朱莉娅找到类似的命令.朱莉娅有这样的命令吗?
julia> Version
ErrorException("Version not defined")
julia> ver
ErrorException("ver not defined")
julia> ver()
ErrorException("ver not defined")
julia> Version()
ErrorException("Version not defined")
Run Code Online (Sandbox Code Playgroud) 问题:当我构建自己的模块时,Julia using与importJulia有什么区别?
我基于阅读文档的猜测: using用于将另一个模块带入当前模块的名称空间.import用于将特定类型/函数/变量从其他模块引入当前模块的名称空间.
那么,我有多难?
我正在尝试将从数据库中提取的数字数据写入Float64[].原始数据是::ASCIIString格式化的,因此尝试将其推送到数组会出现以下错误:
julia> push!(a, "1")
ERROR: MethodError: `convert` has no method matching convert(::Type{Float64}, ::ASCIIString)
This may have arisen from a call to the constructor Float64(...),
since type constructors fall back to convert methods.
Closest candidates are:
call{T}(::Type{T}, ::Any)
convert(::Type{Float64}, ::Int8)
convert(::Type{Float64}, ::Int16)
...
in push! at array.jl:432
Run Code Online (Sandbox Code Playgroud)
试图直接转换数据不出所料引发同样的错误:
julia> convert(Float64, "1")
ERROR: MethodError: `convert` has no method matching convert(::Type{Float64}, ::ASCIIString)
This may have arisen from a call to the constructor Float64(...),
since type constructors fall back to …Run Code Online (Sandbox Code Playgroud) 三种lispy homoiconic语言,Dylan,Julia和Seph都离开了前导括号 - 所以在Common Lisp中的假设函数调用看起来像:
(print hello world)
Run Code Online (Sandbox Code Playgroud)
看起来像下面的假设函数调用
print(hello world)
Run Code Online (Sandbox Code Playgroud)
用上面提到的三种语言.
如果Clojure沿着这条道路走下去 - 为了实现这一目标会有什么牺牲?
推理:除了Clojure中令人惊讶的懒惰功能数据结构,以及地图和seqs的改进语法,对并发的语言支持,JVM平台,工具和令人敬畏的社区 - 它是'LISP'的独特之处在于给出同音性的前导括号,它给出了提供语法抽象的宏.
但如果你不需要括号 - 为什么要这些呢?我能想到保留它们的唯一论点是
(1)重用emacs中的工具支持
(2)促使人们"在LISP中思考"而不是试图将其视为另一种程序性语言)
我试图在阅读发行说明的基础上理解Julia v0.6中的新类型系统.
任何人都可以告诉我什么
inv(M::Matrix{T}) where T <: AbstractFloat
Run Code Online (Sandbox Code Playgroud)
给了我与使用经典不同的东西
inv{T<:AbstractFloat}(M::Matrix{T})
Run Code Online (Sandbox Code Playgroud)
?
Julia 文档似乎在何时使用类型注释方面存在冲突。
来自类型文档:
该
::运算符可用于将类型注释附加到程序中的表达式和变量。这样做有两个主要原因:
- [...]
- 向编译器提供额外的类型信息,这可以在某些情况下提高性能。
来自性能提示:
如果类型是抽象的或在运行时构造的,类型注释不会增强(实际上可能会阻碍)性能。
为了便于说明,假设我有以下层次结构:
abstract type Character end
struct SpaceMarine <: Character end
# I've used the abstract type Character as a type annotation.
svetlana :: Character = SpaceMarine()
Run Code Online (Sandbox Code Playgroud)
像我一样使用类型注释(注意它是抽象的)会阻碍性能还是有帮助?
在这种情况下,svetlana只能是 的子类型Character,这是我需要的行为。
就像在 C# 或 Java 中一样,您可以做Character svetlana = new SpaceMarine(),svetlana只能是 的任何子类型Character。
如果使用类型注释会损害性能,我该如何保留 的svetlana类型Character?
我不想有人写svetlana = "Space Marine"。在本例中,它现在是一个String.
抱歉,如果这相当普遍 - 虽然仍然是一个编码问题.
有一点时间在我的手上,我一直在努力学习一点Julia.我认为一个好的开始是复制R microbenchmark功能 - 所以我可以无缝地比较R和Julia功能.
例如,这是microbenchmark我试图模拟的2个R函数的输出:
Unit: seconds
expr min lq median uq max neval
vectorised(x, y) 0.2058464 0.2165744 0.2610062 0.2612965 0.2805144 5
devectorised(x, y) 9.7923054 9.8095265 9.8097871 9.8606076 10.0144012 5
Run Code Online (Sandbox Code Playgroud)
所以到目前为止,在朱莉娅,我正在尝试编写惯用语和希望可理解/简洁的代码.因此,我用列表推导替换了一个双循环来创建一个时序数组,如下所示:
function timer(fs::Vector{Function}, reps::Integer)
# funs=length(fs)
# times = Array(Float64, reps, funs)
# for funsitr in 1:funs
# for repsitr in 1:reps
# times[reps, funs] = @elapsed fs[funs]()
# end
# end
times= [@elapsed fs[funs]() for x=1:reps, funs=1:length(fs)]
return times
end …Run Code Online (Sandbox Code Playgroud)