2017-02-05 23 views
0

私は6次元の数値配列Aを持っていて、それを2次元配列に変形したいと思います。結果の行列の行は、Aの最初の3つのディメンションでマルチインデックスされ、列の最後の3つのディメンションでマルチインデックスされる必要があります。pandasまたはnumpyを使用してこれを達成する最善の方法は何ですか?6次元配列を2次元データフレームに変形する

答えて

0

これはちょうどこれを行う便利な機能です。

def make2d(a): 
    shape = a.shape 
    n = len(shape) 
    col_lvls = n // 2 
    idx_lvls = n - col_lvls 

    midx = pd.MultiIndex.from_product(
     [range(i) for i in shape[:idx_lvls]], 
     names=['d-{}'.format(d) for d in range(1, idx_lvls + 1)]) 
    mcol = pd.MultiIndex.from_product(
     [range(i) for i in shape[idx_lvls:]], 
     names=['d-{}'.format(d) for d in range(idx_lvls + 1, idx_lvls + col_lvls + 1)]) 

    return pd.DataFrame(
     a.reshape(np.array(shape[:3]).prod(), -1), 
     midx, mcol 
    ) 

デモ

a = np.arange(216).reshape(2, 3, 2, 3, 2, 3) 

make2d(a) 

enter image description here