【发布时间】:2018-02-28 10:00:59
【问题描述】:
我有一个函数,它返回一个元素类型与输入数组相同但具有额外维度的数组。 这是一个简单的例子:
function myfun(a::Array{T,N}) where {T,N}
b = Array{T,N+1}(size(a)...,2)
b[:] = 42
return b
end
在 2x2 数组上调用此函数时,它返回一个 2x2x2 数组。
myfun(zeros(2,2))
2×2×2 Array{Float64,3}:
[:, :, 1] =
42.0 42.0
42.0 42.0
[:, :, 2] =
42.0 42.0
42.0 42.0
但是,此函数不是类型稳定的。根据@code_warntype,b 的类型为Any。
即使在b 上使用类型注释,结果也不是类型稳定的
关于维数:
function myfun(a::Array{T,N}) where {T,N}
b = Array{T,N+1}(size(a)...,2) :: Array{T,N+1}
b[:] = T(42)
return b
end
@code_warntype myfun(zeros(2,2)) 现在返回Array{Float64,_} where _ 类型为b。当输入参数为 2 维时,Julia 是否无法计算出维数为 3?
我正在使用 julia 0.6.2(在 linux 上)。
【问题讨论】:
标签: types julia generic-programming