I have allocated a long vector, and filled it to nearly the end.
I don’t need the last few, remaining elements. That memory can be freed.
Is there a way to ‘chop off’ the last part of the vector – without creating a view
, or copying to a new vector (by slicing, x[1:i]
) ?
(Context is, I’m simulating a Poisson process within a fixed time interval:
using Distributions
function gen_Poisson_spikes(rate, duration)
N_distr = Poisson(rate * duration)
max_N = cquantile(N_distr, 1e-14) # Cannot take a much smaller chance than ~1e-15:
# https://github.com/JuliaStats/Rmath-julia/blob/master/src/qpois.c#L86
spikes = Vector{Float64}(undef, max_N)
ISI_distr = Exponential(inv(rate))
i = 0
t = zero(duration)
while t ≤ duration
i += 1
spikes[i] = (t += rand(ISI_distr))
end
spikes[1:i]
end
For rate = 100 Hz and duration = 10 minutes, the typical N ≈ 60000, and max_N
(at p < 1e-14) is 61855.
i.e. we don’t need the last ~1855, uninitialized elements of spikes
.
)