I need to deal with values assigned to a d-dimensional cube, where the dimension d varies. Say L is the side length of a cube. To access a d-dimensional array with L^d entries I used the following.
idx = Iterators.product(repeat([1:L],d)...)
for n in idx
...
end
While this works for smaller values, it starts to behave weirdly for larger (yet not too large) parameters. Here is a minimal example:
using Random
L = 300; d = 3;
data = randn((L,L,L))
idx = Iterators.product(repeat([1:L],d)...)
for n in idx
data[n...]
end
This sometimes works, sometimes does not. I rand this code 4 times, and it gave this error on my 4th run. (The number of runs to get an error is arbitrary for each try.)
ERROR: BoundsError: attempt to access 300×300×300 Array{Float64, 3} at index [139898804512912, 139898846725200, 140729172278576]
As I have 96GB of rams, there is no way that my system cannot handle 300^3 indices. Are there anything I am missing?
In addition, are there better ways to get d-dimensional indices than Iterators.product(repeat([1:L],d)…)?