### Quick Overview

How to make a directed representation of a symetric matrix into an

undirected representation.

### Overview

That’s a long task. Really what it means is as follows. Suppose I have a matrix, let’s say, A[i,j]. Now, if A is sparse (that is, most of the elements are zero / null / any constant value), we may choose to store it in a text file like such:

`i1,j1,value`

i2,j2,value

i3,j3,value

etc.

Now, sometimes you have a symetric matrix, where the value is a function of i and j. For example, those distance guides you see on AAA maps are triangular, not square, because the distance between Washington and New York is the same as the distance between New York and Washington. In other words, `A[i,j] = A[j,i]`

for all i and j.

[In case you think this is obvious, you may not understand what the matrix is for. Suppose instead of Dist[NY,Wash] = Dist[Wash,NY] we had Moving[NY,Wash] to represent the number of people moving from NY to Washington. Obviously, that number would be different from Moving[Wash,NY], which is the number of people moving from Washington to New York.]

Getting back to the task, how can we easily filter out the duplicated elements, without having to take the text file, make a giant matrix in memory, and then write out the upper (or lower) half?

### Solution

We can do the following:

For each line,

- Read
- Write it both forwards and backwards
- Loop

Then, sort, and remove duplicates (easy with the `sort`

and `uniq`

commands). Then, just loop through, removing all elements where i is greater than j.

### Note

Some people may say this is obvious. Well, it is… but I didn’t see it immediately. Thanks to Dr. Dick Klavans for pointing it out to me.

Enjoy.