# Outer broadcasting?

**URL:** https://discourse.julialang.org/t/outer-broadcasting/22701
**Category:** General Usage
**Created:** [April 3, 2019, 3:03pm UTC](https://discourse.julialang.org/t/outer-broadcasting/22701 "2019-04-03T15:03:44Z")
**Posts on this page:** 1
**Showing post:** 6

<div class="post-metadata">

### Author: ![rdeits](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rdeits/32/286_2.png) [@rdeits](https://discourse.julialang.org/u/rdeits)
#### Post date: [April 4, 2019, 2:01pm UTC](https://discourse.julialang.org/t/outer-broadcasting/22701/6 "2019-04-04T14:01:25Z")

</div>

Whoops, sorry, I missed that 🙂

In that case, this seems like a great time for some metaprogramming! How does this look?

```julia
julia> @generated function outer(f, args::Tuple{Vararg{Any, N}}) where {N}
         expr = Expr(:call, :broadcast, :f)
         for i in 1:N
           if i == 1
             push!(expr.args, :(args[1]))
           else
             push!(expr.args, Expr(:call, :reshape, :(args[$i]), Expr(:tuple, [1 for _ in 1:i - 1]..., :(:))))
           end
         end
         expr
       end
outer (generic function with 1 method)

julia> @btime outer($f, ($x, $y, $z));
  108.493 ms (3 allocations: 457.76 MiB)

```

---

_[View the full topic](https://discourse.julialang.org/t/outer-broadcasting/22701)._
