重塑numpy中的矩阵

时间:2018-07-18 02:02:16

标签: python arrays numpy

我目前正在尝试将三角矩阵重塑成这种不同的形式

              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
...

也就是说,我正在尝试为每个索引创建重复的列,反之亦然。

我使用了一种称为J的面向数组的语言,但是对于python numpy来说我还是很陌生。你们可以帮我解决这个问题吗?

预先感谢=]

1 个答案:

答案 0 :(得分:1)

首先,pandas更容易解决这个问题。

我已经进行了设置,可能会有所帮助,但是如果您真的不喜欢使用Numpy,那么它将不是解决问题的适当方法。

首先,我为您的numpy数组设置了一个类似的DataFrame对象:

$ 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

然后,我用您要求的值填充了它,尽管我没有使用它们。

$ 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

最后,我只是简单地获取了索引和列,并使用了product中的itertools函数将每个组合都放入一个元组列表中。

$ 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

我将看一下Pandas文档。它们具有许多功能,可以按您感兴趣的方式操作数据框。