# Broadcasting a function with some non-broadcasted inputs

**URL:** https://discourse.julialang.org/t/broadcasting-a-function-with-some-non-broadcasted-inputs/18841
**Category:** General Usage
**Created:** [December 19, 2018, 8:31pm UTC](https://discourse.julialang.org/t/broadcasting-a-function-with-some-non-broadcasted-inputs/18841 "2018-12-19T20:31:42Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![BioTurboNick](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bioturbonick/32/6380_2.png) [@BioTurboNick](https://discourse.julialang.org/u/BioTurboNick)
#### Post date: [December 19, 2018, 8:31pm UTC](https://discourse.julialang.org/t/broadcasting-a-function-with-some-non-broadcasted-inputs/18841/1 "2018-12-19T20:31:42Z")

</div>

I have a function that takes a matrix and two scalars. The matrix input is identical for each call, but the scalars change with each call. I would like to broadcast over vectors supplying those scalars. Is it possible to inform Julia that a particular function argument is not broadcasted?

e.g.

```julia
function foo(values, n, m)
    values .+ n .+ m
end

vals = [1 2 3; 4 5 6]
n = [9, 3]
m = [4, 5]

foo.(values, n, m)

```

I can assign a local function:

```julia
bfoo(n, m) = foo(vals, n, m)
bfoo.(n, m)

```

Or use map

```julia
map(i -> foo(vals, n[i], m[i]), 1:length(n))

```

It’d be nice to be able to express this more cleanly.

---

<div class="post-metadata">

### Author: ![pdeffebach](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pdeffebach/32/10320_2.png) [@pdeffebach](https://discourse.julialang.org/u/pdeffebach)
#### Post date: [December 19, 2018, 8:39pm UTC](https://discourse.julialang.org/t/broadcasting-a-function-with-some-non-broadcasted-inputs/18841/2 "2018-12-19T20:39:31Z")

</div>

Does `Ref(vals)` work?

---

<div class="post-metadata">

### Author: ![BioTurboNick](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bioturbonick/32/6380_2.png) [@BioTurboNick](https://discourse.julialang.org/u/BioTurboNick)
#### Post date: [December 19, 2018, 8:40pm UTC](https://discourse.julialang.org/t/broadcasting-a-function-with-some-non-broadcasted-inputs/18841/3 "2018-12-19T20:40:56Z")

</div>

Ah, it does, thank you!

---

<div class="post-metadata">

### Author: ![xiaodai](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/xiaodai/32/15937_2.png) [@xiaodai](https://discourse.julialang.org/u/xiaodai)
#### Post date: [December 20, 2018, 4:49am UTC](https://discourse.julialang.org/t/broadcasting-a-function-with-some-non-broadcasted-inputs/18841/4 "2018-12-20T04:49:29Z")

</div>

> [@BioTurboNick](#):
>
> foo.(values, n, m)

what about `foo.((values,), n, m)`?

---

<div class="post-metadata">

### Author: ![tkf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tkf/32/17635_2.png) [@tkf](https://discourse.julialang.org/u/tkf)
#### Post date: [December 20, 2018, 6:15am UTC](https://discourse.julialang.org/t/broadcasting-a-function-with-some-non-broadcasted-inputs/18841/5 "2018-12-20T06:15:40Z")

</div>

`Ref` is better, e.g., if you want a number back when `n` and `m` are numbers:

```julia
julia> foo = +
+ (generic function with 160 methods)

julia> foo.(Ref(1), 2, 3)
6

julia> foo.((1,), 2, 3)
(6,)

```
