# Vectorizing a summation

**URL:** <https://discourse.julialang.org/t/vectorizing-a-summation/117435>\
**Category:** New to Julia\
**Tags:** broadcast\
**Created:** [July 24, 2024, 6:03pm UTC](https://discourse.julialang.org/t/vectorizing-a-summation/117435 "2024-07-24T18:03:22Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![gkeee](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gkeee/32/13964_2.png) [@gkeee](https://discourse.julialang.org/u/gkeee)\
**Post date:** [July 24, 2024, 6:03pm UTC](https://discourse.julialang.org/t/vectorizing-a-summation/117435/1 "2024-07-24T18:03:22Z")

</div>

```julia
term = 0
for k in 1:N
    term_inner = 0
    for p in 0:m
        term_inner += binomial(m, p) * c[k]^p *f[k]^(m - p) * integral_Ik_recursive(p, γ)
    end
    term += exp(im * 2π * γ * (k - 1)) * term_inner
end

```

I want to compute this summation if m and \gamma are vectors. Namely, ı want to fill the array with its dimensional length(m) x length(\gamma) . How can i write effective code?

---

<div class="post-metadata">

**Author:** ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)\
**Post date:** [July 24, 2024, 6:23pm UTC](https://discourse.julialang.org/t/vectorizing-a-summation/117435/2 "2024-07-24T18:23:07Z")

</div>

> [@gkeee](#):
>
> How can i write effective code?

One option is to put your code into a function and then broadcast it

First, put your code into a function:

```julia
function mysum(m, γ; c, f, N)
    term = 0
    for k in 1:N
        term_inner = 0
        for p in 0:m
            term_inner += binomial(m, p) * c[k]^p *f[k]^(m - p) * integral_Ik_recursive(p, γ)
        end
        term += exp(im * 2π * γ * (k - 1)) * term_inner
    end
    return term
end

```

The arguments to this function are scalars `m` and `γ`, but you can apply it to vectors with broadcasting:

```julia
mysum.(m, γ'; c, f, N)

```

Another option is to use broadcasting _inside_ your `mysum` function so that it works on vectors. This takes a little more work, e.g. initializing `term` based on the sizes of the vectors, using “dot” operations like `@. term += exp(...)`, and so on.

---

<div class="post-metadata">

**Author:** ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)\
**Post date:** [July 24, 2024, 6:29pm UTC](https://discourse.julialang.org/t/vectorizing-a-summation/117435/3 "2024-07-24T18:29:53Z")

</div>

On a separate note, this is a very inefficient way to sum a series like this. You are recomputing the `binomial` factor and powers like `c[k]^p` separately for each loop iteration, when in practice you can compute them much more efficiently using a recurrence relation from the previous term.

See e.g. [Sinc function - and sinc neural networks - and function approximation for the former - #4 by stevengj](https://discourse.julialang.org/t/sinc-function-and-sinc-neural-networks-and-function-approximation-for-the-former/46483/4)

---

<div class="post-metadata">

**Author:** ![gkeee](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gkeee/32/13964_2.png) [@gkeee](https://discourse.julialang.org/u/gkeee)\
**Post date:** [July 24, 2024, 6:41pm UTC](https://discourse.julialang.org/t/vectorizing-a-summation/117435/4 "2024-07-24T18:41:33Z")

</div>

Thank you so much. But i know this method, actually I want to matrix product instead of for loop.

I separated each term like;

```julia
binomial.(m', p)

term_c = c .^ p'

term_f = reverse(f .^ (m)', dims=2)

Ip_recursive.(p, γ')

```

But I couldn’t arrange.

---

<div class="post-metadata">

**Author:** ![gkeee](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gkeee/32/13964_2.png) [@gkeee](https://discourse.julialang.org/u/gkeee)\
**Post date:** [July 24, 2024, 6:48pm UTC](https://discourse.julialang.org/t/vectorizing-a-summation/117435/5 "2024-07-24T18:48:24Z")

</div>

I have realized your last paragraph now. Sorry. Yes, ı want to solve by broadcasting inside.

---

<div class="post-metadata">

**Author:** ![NonDairyNeutrino](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nondairyneutrino/32/221496_2.png) [@NonDairyNeutrino](https://discourse.julialang.org/u/NonDairyNeutrino)\
**Post date:** [July 24, 2024, 7:31pm UTC](https://discourse.julialang.org/t/vectorizing-a-summation/117435/6 "2024-07-24T19:31:15Z")

</div>

It looks like you’re doing some discrete Fourier transforms as well. Have you seen the [FFTW package](https://juliapackages.com/p/fftw)?
