Say I have 2 matrices, a and b. How can I call a function that expects 2 vectors by broadcasting over their (eg) rows. For example:
function foo(a :: Vector, b :: Vector, c :: Float64)
return (sum(a) + sum(b)) / c
end
a = [1 2 3 4; 5 6 7 8]
b = [1 2 3 4; 5 6 7 8]
c = 2.0
Should return a Vector of [10, 26]. Something that does not work but points to how this could be done is using foo.(eachrow(a), eachrow(b), c). Or similarly, mapslices(a->foo(a,b), a, dims=2), even though it does not work either since b is not sliced into vectors.
julia> function foo(a, b, c)
return (sum(a) + sum(b)) / c
end
julia> foo.(eachrow(a),eachrow(b),c)
2-element Vector{Float64}:
10.0
26.0
btw, you probably should drop any and all type annotation, the c::Float64 is clearly too restrictive, and the minimal fix you need is Vector β AbstractVector
Yeap. Actually I have it now annotated as foo(a :: Vector{T}, b :: Vector{T}, c :: T) where T <: AbstractFloat, which works and it is more case specific for me.