Kevin Choi
Kevin Choi

Reputation: 765

Reshaping matrix in numpy

I am currently trying to reshape a triangular matrix into a different form like this

              S&P 500   Russel 2000     Nasdaq Composite
S&P 500             1             0     0
Russel 2000         4             5     0
Nasdaq Composite    7             8     9

    0                           1                  
0   S&P 500                     S&P 500      
1   Russel 2000                 S&P 500
2   Nasdaq Composite            S&P 500
3   S&P 500                     Russel 2000
4   Russel 2000                 Russel 2000
...

That is, I am trying to make repetitive columns for each index or vice versa.

I have used an array-oriented language called J, but I am pretty new to python numpy. Can you guys help me out on this problem?

Thanks in advance = ]

Upvotes: 0

Views: 59

Answers (1)

William Yolland
William Yolland

Reputation: 151

First of all this looks like a problem more easily tackled by pandas.

I have set something up which might help, but if you are really stuck with using Numpy then it won't be a proper solution to your problem.

First I have set up a similar DataFrame object to your numpy array:

$ import pandas as pd
$ df = pd.DataFrame(columns=['a','b','c'], index=['a','b','c'])
    a    b    c
a  NaN  NaN  NaN
b  NaN  NaN  NaN
c  NaN  NaN  NaN

Then I have filled it with the values you requested, although I don't use them.

$ df['a'] = [1, 4, 7]
$ df['b'] = [0, 5, 8]
$ df['c'] = [0, 0, 9]
   a  b  c
a  1  0  0
b  4  5  0
c  7  8  9

Finally I have simply taken the index and the columns and used the product function from itertools to get every combination into a list of tuples.

$ from itertools import product
$ p = product(df.columns.values, df.index.values)
$ new_df = pd.DataFrame([i for i in p])
   0  1
0  a  a
1  a  b
2  a  c
3  b  a
4  b  b
5  b  c
6  c  a
7  c  b
8  c  c

I would have a look at the Pandas documentation. They have many functions to manipulate dataframes in ways that you might be interested in.

Upvotes: 1

Related Questions