# Assign values to a subarray and it take a long time and large allocation

**URL:** https://discourse.julialang.org/t/assign-values-to-a-subarray-and-it-take-a-long-time-and-large-allocation/67711
**Category:** Performance
**Tags:** question, memory-allocation
**Created:** [September 5, 2021, 10:02am UTC](https://discourse.julialang.org/t/assign-values-to-a-subarray-and-it-take-a-long-time-and-large-allocation/67711 "2021-09-05T10:02:50Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![disadone](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/disadone/32/27089_2.png) [@disadone](https://discourse.julialang.org/u/disadone)
#### Post date: [September 5, 2021, 10:02am UTC](https://discourse.julialang.org/t/assign-values-to-a-subarray-and-it-take-a-long-time-and-large-allocation/67711/1 "2021-09-05T10:02:50Z")

</div>

I have functions such as

```julia
function max_(v::Matrix{Float64})
    m,idx=findmax(v,dims=2)
    Dt=vec(getindex.(idx,2))
    return m,Dt
end

function max_!(Vs::AbstractVector{Float64},Ds::AbstractVector{Float64},v::Matrix{Float64})
    Vs,idx=findmax(v,dims=2)
    Ds=vec(getindex.(idx,2))
end

```

I run this

```julia
mat=[[1,2.,3] [4.,5,6] [1.,2.,3.]]

Vs=zeros(3,3);Ds=zeros(3,3);

@time max_!((@view Vs[:,1]),(@view Ds[:,1]),mat)

```

It takes

> 0.057112 seconds (154.04 k allocations: 8.670 MiB, 99.92% compilation time)

and

then run this

```julia
@time Vs[:,1],Ds[:,1]=max_(mat)

```

It takes

> 0.037935 seconds (34.87 k allocations: 1.926 MiB, 99.73% compilation time)

If I try

```julia
@time V,D=max_(mat)

```

I get

> 0.000014 seconds (10 allocations: 528 bytes)

How could that be? Why is it so low to give values to a subarray?

---

<div class="post-metadata">

### Author: ![abulak](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/abulak/32/28314_2.png) [@abulak](https://discourse.julialang.org/u/abulak)
#### Post date: [September 5, 2021, 10:45am UTC](https://discourse.julialang.org/t/assign-values-to-a-subarray-and-it-take-a-long-time-and-large-allocation/67711/2 "2021-09-05T10:45:28Z")

</div>

> [@disadone](#):
>
> 0.057112 seconds (154.04 k allocations: 8.670 MiB, 99.92% compilation time)

you’re measuring compilation time, mostly 😉  
EDIT: second run here takes

```julia
julia> @time max_!((@view Vs[:,1]),(@view Ds[:,1]),mat);
0.000022 seconds (14 allocations: 656 bytes)

```

---

<div class="post-metadata">

### Author: ![disadone](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/disadone/32/27089_2.png) [@disadone](https://discourse.julialang.org/u/disadone)
#### Post date: [September 5, 2021, 11:13am UTC](https://discourse.julialang.org/t/assign-values-to-a-subarray-and-it-take-a-long-time-and-large-allocation/67711/3 "2021-09-05T11:13:56Z")

</div>

My bad, sorry! Contribute a meaningless question ::

---

<div class="post-metadata">

### Author: ![hendri54](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hendri54/32/9621_2.png) [@hendri54](https://discourse.julialang.org/u/hendri54)
#### Post date: [September 5, 2021, 3:57pm UTC](https://discourse.julialang.org/t/assign-values-to-a-subarray-and-it-take-a-long-time-and-large-allocation/67711/4 "2021-09-05T15:57:42Z")

</div>

These are perhaps just toy functions, but note that `max_!` does not modify the `Vs` and `Ds` input arguments. You need `Ds .= vec` for that.

---

<div class="post-metadata">

### Author: ![disadone](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/disadone/32/27089_2.png) [@disadone](https://discourse.julialang.org/u/disadone)
#### Post date: [September 6, 2021, 1:11pm UTC](https://discourse.julialang.org/t/assign-values-to-a-subarray-and-it-take-a-long-time-and-large-allocation/67711/5 "2021-09-06T13:11:42Z")

</div>

I did not know .= do necessary to change the value. Thank you for reminding! And these are toy functions.
