# Standard patterns for arbitrary array constructors

**URL:** <https://discourse.julialang.org/t/standard-patterns-for-arbitrary-array-constructors/10389>\
**Category:** General Usage\
**Created:** [April 17, 2018, 2:32pm UTC](https://discourse.julialang.org/t/standard-patterns-for-arbitrary-array-constructors/10389 "2018-04-17T14:32:52Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![ExpandingMan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/expandingman/32/866_2.png) [@ExpandingMan](https://discourse.julialang.org/u/ExpandingMan)\
**Post date:** [April 17, 2018, 2:32pm UTC](https://discourse.julialang.org/t/standard-patterns-for-arbitrary-array-constructors/10389/1 "2018-04-17T14:32:52Z")

</div>

I often find myself doing something like

```julia
M = Matrix{Float64}(undef, m, n)
for i ∈ 1:m, j ∈ 1:n
    # do some stuff which is too long for a list comprehension
end

```

it would be nice if I could do

```julia
Matrix{Float64}(m,n) do (i,j)
    # do some stuff which is too long for list comprehension
end

```

I have a feeling that this probably already exists, but what is the appropriate function called? I can’t seem to find it. Or does it not exist?

---

<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:** [April 17, 2018, 2:56pm UTC](https://discourse.julialang.org/t/standard-patterns-for-arbitrary-array-constructors/10389/2 "2018-04-17T14:56:46Z")

</div>

(Note that your loops are in a suboptimal order.)

---

<div class="post-metadata">

**Author:** ![ExpandingMan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/expandingman/32/866_2.png) [@ExpandingMan](https://discourse.julialang.org/u/ExpandingMan)\
**Post date:** [April 17, 2018, 2:57pm UTC](https://discourse.julialang.org/t/standard-patterns-for-arbitrary-array-constructors/10389/3 "2018-04-17T14:57:36Z")

</div>

Oh sorry, I constantly get it backwards 😊

---

<div class="post-metadata">

**Author:** ![tk3369](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tk3369/32/2824_2.png) [@tk3369](https://discourse.julialang.org/u/tk3369)\
**Post date:** [April 17, 2018, 3:42pm UTC](https://discourse.julialang.org/t/standard-patterns-for-arbitrary-array-constructors/10389/4 "2018-04-17T15:42:21Z")

</div>

…which is why it would be nice to be abstracted away with the “do” block 😉

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [April 17, 2018, 4:15pm UTC](https://discourse.julialang.org/t/standard-patterns-for-arbitrary-array-constructors/10389/5 "2018-04-17T16:15:08Z")

</div>

You can always do

```julia
f(i, j) = ...
[f(i,j) for i in i:size(x,1), j in 1:size(x, 2)]

```

But this also works:

```julia
julia> map(Iterators.product(1:size(x,1), 1:size(x,2))) do I
           i, j = I
           i + j / 2
       end
2×5 Array{Float64,2}:
 1.5 2.0 2.5 3.0 3.5
 2.5 3.0 3.5 4.0 4.5

```

---

<div class="post-metadata">

**Author:** ![mbauman](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbauman/32/31082_2.png) [@mbauman](https://discourse.julialang.org/u/mbauman)\
**Post date:** [April 17, 2018, 5:39pm UTC](https://discourse.julialang.org/t/standard-patterns-for-arbitrary-array-constructors/10389/6 "2018-04-17T17:39:11Z")

</div>

With respect to the original request for `Array(f, i, j)` where `f` is callable: I agree! We’re just starting to enter the brave new world where such a thing is theoretically possible and meaningful.

---

<div class="post-metadata">

**Author:** ![ExpandingMan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/expandingman/32/866_2.png) [@ExpandingMan](https://discourse.julialang.org/u/ExpandingMan)\
**Post date:** [April 17, 2018, 5:47pm UTC](https://discourse.julialang.org/t/standard-patterns-for-arbitrary-array-constructors/10389/7 "2018-04-17T17:47:55Z")

</div>

> [@mbauman](#):
>
> With respect to the original request for Array(f, i, j) where f is callable

For the record, I wasn’t necessarily asking for exactly that syntax, but I think it would be nice to have something like this.
