4

I'm coming from the programming world , and I need to create unique number for each element in a matrix. Say I have a $4\times4$ matrix $A$. I want to find a simple formula that will give each of the $16$ elements a unique number id. Can you suggest me where to start ?

5 Answers5

4

How about $$f(r,c) = Kr+c,$$ where $K$ is the number of columns in the matrix and $r$ and $c$ correspond to the row and column you want an ID for?

For your 4 by 4 matrix, we would have $$f(r,c) = 4r+c,$$ where we have $r,c\in\{0,1,2,3\}$.

pshmath0
  • 10,565
2

Any one-to-one mapping $\mathbb{N}^2 \to \mathbb{N}$ will work.

This one is easy $\mathbb{N}^2 \to \mathbb{N}$ bijection

Or this one is easier :-) If you have index $(i,j)$, your mapping will be $f(i,j)=2^i3^j$

SomeOne
  • 917
2

Pairing Function :

Use pairing function . This is suggested by mathematicians to be the best way to generate a unique id , given 2 natural numbers (in our case say position in matrix) .

refer . http://en.wikipedia.org/wiki/Pairing_function

Since you are from a programming background I would prefer redirecting you to this link which talks more about this algorithm

https://stackoverflow.com/questions/919612/mapping-two-integers-to-one-in-a-unique-and-deterministic-way

This can even be used for huge sized matrices

.

Harish Kayarohanam
  • 1,980
  • 2
  • 15
  • 24
1

You can simply "string out" the elements of the matrix. That is, you label the $(1,1)$ entry with $1$, the $(1,2)$ entry with $2$, $\dots$, the $(2,1)$ entry with $5$, $\dots$, the $(4,4)$ entry with $16$.

You can construct such bijection $f:\mathbb{N}\to\mathbb{N}^2$ using the floor function that is contained in the standard libraries of most languages:

$$f(k)=\left(\left\lfloor\begin{matrix}k\\4\end{matrix}\right\rfloor,k-4\left\lfloor\begin{matrix}k\\4\end{matrix}\right\rfloor\right),\quad\quad f^{-1}((i,j))=4(i-1)+j.$$

jkn
  • 5,129
  • 25
  • 53
0

If you're coming from a programming background, you should know about column-major and row-major orderings.

In row-major order, the matrix $\begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}$ is laid out in memory as [1, 2, 3, 4]. In column-major order, it is [1 3 2 4].

It should be easy to see how one can reverse the vector [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16] into a matrix using row-major ordering (or column-major ordering--whichever!).

Emily
  • 35,688
  • 6
  • 93
  • 141