# What is Julia's im2col?

**URL:** https://discourse.julialang.org/t/what-is-julias-im2col/14066
**Category:** General Usage
**Created:** [August 26, 2018, 4:37am UTC](https://discourse.julialang.org/t/what-is-julias-im2col/14066 "2018-08-26T04:37:28Z")
**Posts on this page:** 1
**Showing post:** 6

<div class="post-metadata">

### Author: ![Seif\_Shebl](https://avatars.discourse-cdn.com/v4/letter/s/eada6e/32.png) [@Seif\_Shebl](https://discourse.julialang.org/u/Seif_Shebl)
#### Post date: [August 26, 2018, 7:09pm UTC](https://discourse.julialang.org/t/what-is-julias-im2col/14066/6 "2018-08-26T19:09:26Z")

</div>

The nice thing about Julia is that you can implement your own algorithm quite easily and it turns out to be also fast. Here is a very rough implementation of MATLAB’s `im2col(A, [m,n])` in Julia:

```julia
julia> function im2col(A, m,n) # mxn: block_size
           M,N = size(A)
           mc = M-m+1 # no. vertical blocks
           nc = N-n+1 # no. horizontal blocks
           B = Array{eltype(A)}(undef, m*n, mc*nc)
           for j = 1:nc
             for i = 1:mc
               @views block = A[i:i+m-1, j:j+n-1]
               for k=1:m*n
                  B[k,(j-1)*mc+i] = block[k]
               end
             end
           end
           B
       end
im2col (generic function with 1 method)

julia> A = reshape(1:64,8,:) # A: 8x8
8×8 reshape(::UnitRange{Int64}, 8, 8) with eltype Int64:
 1 9 17 25 33 41 49 57
 2 10 18 26 34 42 50 58
 3 11 19 27 35 43 51 59
 4 12 20 28 36 44 52 60
 5 13 21 29 37 45 53 61
 6 14 22 30 38 46 54 62
 7 15 23 31 39 47 55 63
 8 16 24 32 40 48 56 64

julia> @btime B = im2col(A, 2,2)
  882.021 ns (1 allocation: 1.77 KiB)
4×49 Array{Int64,2}:
  1 2 3 4 5 6 7 9 10 11 12 13 14 15 … 41 42 43 44 45 46 47 49 50 51 52 53 54 55
  2 3 4 5 6 7 8 10 11 12 13 14 15 16 42 43 44 45 46 47 48 50 51 52 53 54 55 56
  9 10 11 12 13 14 15 17 18 19 20 21 22 23 49 50 51 52 53 54 55 57 58 59 60 61 62 63
 10 11 12 13 14 15 16 18 19 20 21 22 23 24 50 51 52 53 54 55 56 58 59 60 61 62 63 64

```

---

_[View the full topic](https://discourse.julialang.org/t/what-is-julias-im2col/14066)._
