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