相关疑难解决方法(0)

如何在处理多种类型和数组时编写"好"的Julia代码(多次调度)

我是朱莉娅的新手,鉴于我的Matlab起源,我在确定如何编写利用多个调度和Julia的类型系统的"好"Julia代码时遇到了一些困难.

考虑我有一个提供a的平方的函数的情况Float64.我可以这样写:

function mysquare(x::Float64)
    return(x^2);
end
Run Code Online (Sandbox Code Playgroud)

有时,我想Float64在一维数组中对所有s 进行平方,但不想mysquare每次都写出一个循环,所以我使用多次调度并添加以下内容:

function mysquare(x::Array{Float64, 1})
    y = Array(Float64, length(x));
    for k = 1:length(x)
        y[k] = x[k]^2;
    end
    return(y);
end
Run Code Online (Sandbox Code Playgroud)

但是现在我有时正在使用Int64,所以我写了两个利用多个调度的函数:

function mysquare(x::Int64)
    return(x^2);
end
function mysquare(x::Array{Int64, 1})
    y = Array(Float64, length(x));
    for k = 1:length(x)
        y[k] = x[k]^2;
    end
    return(y);
end
Run Code Online (Sandbox Code Playgroud)

这是正确的吗?或者是否有更具思想性的方法来应对这种情况?我应该使用这样的类型参数吗?

function mysquare{T<:Number}(x::T)
    return(x^2);
end
function mysquare{T<:Number}(x::Array{T, 1})
    y = Array(Float64, length(x));
    for k = 1:length(x)
        y[k] = x[k]^2;
    end
    return(y);
end
Run Code Online (Sandbox Code Playgroud)

这感觉很合理,但我的代码运行速度会与避免参数类型的情况一样快吗?

总之,我的问题分为两部分:

  1. 如果快速代码对我很重要,我应该如上所述使用参数类型,还是应该为不同的具体类型写出多个版本?或者我应该完全做其他事情? …

arrays types multiple-dispatch julia

36
推荐指数
2
解决办法
1984
查看次数

标签 统计

arrays ×1

julia ×1

multiple-dispatch ×1

types ×1