Julia 使用两个不同类型的参数向量化函数?

Julia 使用两个不同类型的参数向量化函数?,julia,Julia,在Julia中,当两个arg的类型相同时,可以将2 arg函数矢量化: function mysquare(n::Number, x::Number) return n * x^2 end println(mysquare(2, 2.)) # ⇒ 8.0 @vectorize_2arg Number mysquare println(mysquare(2, [2., 3., 4.])) # ⇒ [8.0,18.0,32.0] 除了手动操作外,还有没有其他方法可以将两个不同类型的参

在Julia中,当两个arg的类型相同时,可以将2 arg函数矢量化:

function mysquare(n::Number, x::Number)
    return n * x^2
end

println(mysquare(2, 2.)) # ⇒ 8.0

@vectorize_2arg Number mysquare

println(mysquare(2, [2., 3., 4.])) # ⇒ [8.0,18.0,32.0]
除了手动操作外,还有没有其他方法可以将两个不同类型的参数的函数矢量化:

function mysquare(n::Int64, x::Float64)
    return n * x^2
end

println(mysquare(2, 2.))

@vectorize_2arg Int64 Float64 mysquare # ⇒ wrong number of args

println(mysquare(2, [2., 3., 4.]))
我修改了宏的代码。我不确定我是否完全理解这里的所有含义,但它是有效的:

macro vectorize_2arg_full(S1,S2,f)
    S1 = esc(S1); S2 = esc(S2); f = esc(f); T1 = esc(:T1); T2 = esc(:T2)
    quote
        ($f){$T1<:$S1, $T2<:$S2}(x::($T1), y::AbstractArray{$T2}) =
            reshape([ ($f)(x, y[i]) for i=1:length(y) ], size(y))
        ($f){$T1<:$S1, $T2<:$S2}(x::AbstractArray{$T1}, y::($T2)) =
            reshape([ ($f)(x[i], y) for i=1:length(x) ], size(x))

        function ($f){$T1<:$S1, $T2<:$S2}(x::AbstractArray{$T1}, y::AbstractArray{$T2})
            shp = promote_shape(size(x),size(y))
            reshape([ ($f)(x[i], y[i]) for i=1:length(x) ], shp)
        end
    end
end

function mysquare(n::Int64, x::Float64)
    return n * x^2
end

println(mysquare(2, 2.))

@vectorize_2arg_full Int64 Float64 mysquare

println(mysquare(2, [2., 3., 4.]))

为此。无需调整。

如果您正在寻找代码审查,则有一个。;)
@vectorize_2arg Number mysquare