# Broadcast over matrix dimension for multiple arguments

**URL:** <https://discourse.julialang.org/t/broadcast-over-matrix-dimension-for-multiple-arguments/85629>\
**Category:** General Usage\
**Tags:** broadcast\
**Created:** [August 11, 2022, 4:44pm UTC](https://discourse.julialang.org/t/broadcast-over-matrix-dimension-for-multiple-arguments/85629 "2022-08-11T16:44:35Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![b-fg](https://avatars.discourse-cdn.com/v4/letter/b/848f3c/32.png) [@b-fg](https://discourse.julialang.org/u/b-fg)\
**Post date:** [August 11, 2022, 4:44pm UTC](https://discourse.julialang.org/t/broadcast-over-matrix-dimension-for-multiple-arguments/85629/1 "2022-08-11T16:44:35Z")

</div>

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:

```julia
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.

---

<div class="post-metadata">

**Author:** ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)\
**Post date:** [August 11, 2022, 4:46pm UTC](https://discourse.julialang.org/t/broadcast-over-matrix-dimension-for-multiple-arguments/85629/2 "2022-08-11T16:46:30Z")

</div>

```julia
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`

---

<div class="post-metadata">

**Author:** ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)\
**Post date:** [August 11, 2022, 5:01pm UTC](https://discourse.julialang.org/t/broadcast-over-matrix-dimension-for-multiple-arguments/85629/4 "2022-08-11T17:01:56Z")

</div>

It _does_ work, but you sabotage the function by putting in the overly restrictive type annotations.

---

<div class="post-metadata">

**Author:** ![b-fg](https://avatars.discourse-cdn.com/v4/letter/b/848f3c/32.png) [@b-fg](https://discourse.julialang.org/u/b-fg)\
**Post date:** [August 11, 2022, 5:02pm UTC](https://discourse.julialang.org/t/broadcast-over-matrix-dimension-for-multiple-arguments/85629/5 "2022-08-11T17:02:16Z")

</div>

Ah right, thanks for clarifying!

---

<div class="post-metadata">

**Author:** ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)\
**Post date:** [August 11, 2022, 5:02pm UTC](https://discourse.julialang.org/t/broadcast-over-matrix-dimension-for-multiple-arguments/85629/6 "2022-08-11T17:02:54Z")

</div>

You can try `AbstractVector`, or just leave it untyped. Also, `Float64` is much more specific than needed. Maybe use `Number`.

---

<div class="post-metadata">

**Author:** ![b-fg](https://avatars.discourse-cdn.com/v4/letter/b/848f3c/32.png) [@b-fg](https://discourse.julialang.org/u/b-fg)\
**Post date:** [August 11, 2022, 5:04pm UTC](https://discourse.julialang.org/t/broadcast-over-matrix-dimension-for-multiple-arguments/85629/7 "2022-08-11T17:04:48Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)\
**Post date:** [August 11, 2022, 5:10pm UTC](https://discourse.julialang.org/t/broadcast-over-matrix-dimension-for-multiple-arguments/85629/8 "2022-08-11T17:10:07Z")

</div>

That should not work, since `eachrow` does not return `Vector`. Perhaps you have some old definitions there.

---

<div class="post-metadata">

**Author:** ![b-fg](https://avatars.discourse-cdn.com/v4/letter/b/848f3c/32.png) [@b-fg](https://discourse.julialang.org/u/b-fg)\
**Post date:** [August 11, 2022, 5:16pm UTC](https://discourse.julialang.org/t/broadcast-over-matrix-dimension-for-multiple-arguments/85629/9 "2022-08-11T17:16:21Z")

</div>

Spot on… thanks again!
