为什么在这种情况下方法定义的顺序会有所不同?在我看来,这没有多大意义。
julia> f() = 1
f (generic function with 1 method)
julia> f(;arg) = 1
f (generic function with 1 method)
julia> f()
ERROR: UndefKeywordError: keyword argument arg not assigned
Stacktrace:
[1] f() at ./REPL[2]:1
[2] top-level scope at REPL[3]:1
julia&g
有没有办法检查一个函数在Julia中是否有关键字参数?我正在寻找像has_kwargs(fun::Function)这样的东西,如果fun有一个带有关键字参数的方法,它将返回true。
高级思想是构建一个函数:
function master_fun(foo::Any, fun::Function, ar::Tuple, kw::Tuple)
if has_kwargs(fun)
fun(ar... ; kw...)
else
fun(ar...)
end
end
从0.6开始,可以使用where语法在Julia中创建参数化方法。根据版本,where语法
可以在接受类型的任何地方使用。
现在考虑以下人为的示例:
function (rng::R)() where {R <: Range}
return first(rng)
end
当我试图编译它时,会出现以下错误:
ERROR: function type in method definition is not a type
那么,我的问题是,在Julia 0.6+中创建参数函子的正确方法是什么?
给定下面的数据类型,下面的理解将产生两个Array{Any,1} of Players:
[[team.players for team in [big_team_1, big_team_2]]]
然而,下一个理解得到了由12个元素组成的Array{Player,1}所期望的结果:
[[team.players for team in [big_team_1, big_team_2]]...]
...到底在做什么?这个文件在哪里?
数据:
type Player
ranking::Int
end
type Team
players::Array{Player}
end
team_
假设我有以下类型:
type Foo
a::Int64
b::Int64
end
我可以用
bar = Foo(1,2)
这里有使用关键字的方法吗,因为在上面我必须记住a是第一位的,而b是第二位的。就像这样:
bar = Foo(a=1, b=2)
编辑
如果从函数调用的解决方案,则无法工作:
#!/usr/bin/env julia
type Foo
a::Float64
b::Float64
end
function main()
Foo(;a=1, b=2.0) = Foo(a,b)
bar = Foo(a=1, b=2.0)
通过查看一些Flux示例,我拼凑出了这个逻辑预测器。然而,在计算梯度时,我会得到一个错误,Mutating arrays is not supported。我试图使loss和predict更加简洁,甚至尝试将损失和预测变成一行。
如何才能得到这个预测器的梯度呢?
错误:
Mutating arrays is not supported
Stacktrace:
[1] error(::String) at ./error.jl:33
[2] (::Zygote.var"#459#460")(::Nothing) at /Users/john/.julia/packages/
我有一个我正在使用的resnet模型。我最初使用成批的图像训练模型。现在它已经训练好了,我想对一张图像(224x224,3个颜色通道)进行推断。但是,当我通过model(imgs[:, :, :, 2])将图像传递给我的模型时,我得到: DimensionMismatch("Rank of x and w must match! (3 vs. 4)")
Stacktrace:
[1] DenseConvDims(x::Array{Float32, 3}, w::Array{Float32, 4}; kwargs::Base.Iterators.Pairs{Symbol,
在Julia 1.4.0中,我具有以下功能:
function output(W::Int64,F::Int64,P::Int64,S::Int64)
return ((W-F+2*P)/S +1)
end
当我输入以下命令时,输出如预期的那样
julia> output(28,5,0,1)
24.0
现在,为了确定哪个参数是什么,我将在调用函数时显式地命名它们(如果可能的话,如果可以以不同的顺序编写参数,这将是有帮助的)。
julia> output(W=28,F=5,P=0,S=1)
ERROR: MethodError: no method mat
我对Julia是新手,在R方面更有经验,所以对于熟悉这两者的人,这里有一段R代码片段,我试图在Julia中复制它。
f = function(a, b = 1, c = 2) a + 2*b = 3*c
g = function(d, ...) 5 + f(d, ...)
这样,调用g(1)将是有效的,它将使用f的默认值进行计算,或者您可以指定g(1, b = 3)或g(1, c = 4, b = 2)或其他任何值。当然,重点是您可以将可选参数的任何排列传递给f,而无需考虑顺序,只要指定了名称即可。
在Julia中,我在这方面遇到了一些麻烦,因为varargs的工作方式有点不同。我知道您可以以
我在一个.jl文件中编写了一个简单的函数,我可以使用forward成功地区分它。但是,我对Julia并不熟悉,我不知道如何查看为区分函数生成的源代码。我尝试过各种各样的东西,比如@code_lowered Zygote.forward(maxPool, [1.0, 2.0])和@code_lowered Zygote.forward(maxPool),但是它们只是向我展示了转发自己的调用。
我如何看到Zygote为向前和反向传递生成的代码?
using Pkg
using Zygote, ForwardDiff
function size1d(v)
return size(v)[1]
您将如何实现这样的函数:
function foo(a,b...,c)
println(a,b,c)
end
foo(2,3,3,"last")
=> a=2,b= (3,3),c=“最后”
我不能用这样的东西:
function foo(a,b...)
c = b[end]
println(a,b,c)
end
因为我想在c上发送,也就是说,我想要有方法:
foo(a,b...,c::Foo)
和
foo(a,b...,c::Bar)
我也不能有这样的东西:
foo_wrapper(a,b...) = foo(a,b[1:end-1],b[en
我经常在我的Windows 10 PC上使用jupyterlab,我总是通过输入以下命令来启动它 > julia
> using IJulia
> jupyterlab() 在命令提示符下。 每次我使用它的时候输入它都很麻烦,所以我试着编写.bat文件来自动化这个过程,如下所示: jupyterlab.bat echo "launching jupyterlab..."
julia
using IJulia
jupyterlab()
end 但是,当Julia启动时,此命令行停止,这意味着cmd不读取using IJulia和jupyterlab()。 为什
我想在Julia中将整数转换为字符串。
当我尝试的时候:
a = 9500
b = convert(String,a)
我得到了错误:
ERROR: LoadError: MethodError: Cannot `convert` an object of type Int64 to an object of type String
This may have arisen from a call to the constructor String(...),
since type constructors fall back to convert methods.
in include_f
是朱莉娅的医生。
它说我们可以为Julia的功能设置可选的参数。例如,
function parse(type, num, base=10)
###
end
然后我们可以像这样调用函数parse:
parse(Int,"12",3)
parse(Int,"12")
我已经测试过了,而且确实成功了。
现在,我想对类型中的函数执行同样的操作。以下是一个例子,
type MyTest
testShow::Function
function MyTest()
this = new()
this.testShow = function