Sign up ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

I am working with a native class that represents a 2D image as a 1D array. If you want to change one pixel, for example, you need to now how to derive the index from the x,y coordinates.

So, let's say we have a 1D array array1d like this:

array1d = [ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y ]

In the context of our program, array1d represents a 2D grid:

a b c d e
f g h i j
k l m n o
p q r s t
u v w x y

And we want to perform operations on array1d such as:

  • Get the value at x,y coordinates (in this example, 1,2 would give l)
  • Get any sub-grid using x,y,width,height (1,2,2,2 would give [l, m, q, r])
  • Set the value at any x,y coordinate (etc.)

How do we do these?

share|improve this question
In Matlab, and thus likely math types (which spills into CS), to convert one matrix into another (be it a 1x12 into a 2x6 or a 2x6 into a 3x4) is known as "reshaping" – MichaelT Sep 28 '13 at 17:08

1 Answer 1

up vote 27 down vote accepted

2D / 1D - mapping is pretty simple. Given x and y, and 2D array sizes width and height, you can calculate the according index i in 1D space (zero-based) by

i = x + width*y;

and the reverse operation is

x = i % width;    // % is the "modulo operator", the remainder of i / width;
y = i / width;    // where "/" is an integer division

You can extend this easily to 3 or more dimensions. For example, for a 3D matrix with dimensions "width", "height" and "depth":

i = x + width*y + width*height*z;

and reverse:

x = i % width;
y = (i / width)%height;
z = i / (width*height);
share|improve this answer
+1 for simple algebraic solution! – Sep 28 '13 at 18:07
@awashburn that is the traditional way to do it, it's even built into compilers for static 2D arrays – ratchet freak Sep 28 '13 at 18:26
@mtoast: I don't think so, its just basic integer math. – Doc Brown Sep 29 '13 at 19:11
This example is wrong for 3D. The word depth in the calculation should be height. – jiggunjer Jul 22 at 11:15
@jiggunjer: thanks for the correction, changed my answer accordingly. – Doc Brown Jul 22 at 12:47

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.