首页 > 解决方案 > 基于 2d 数组填充 3d 数组的有效方法是什么?

问题描述

假设我有一个二维数组。

a = np.array([[0,2,3],[4,2,1]])

维度是number_of_instances * 3,其中 2d 数组中的值表示 a 中的行索引pandas dataframe

我有一个dataframe

df = pd.DataFrame(np.array([[10, 10, 10, 10], [11, 11, 11, 11], [12, 12, 12, 12], [13, 13, 13, 13], [14, 14, 14, 14]]), columns = list('ABCD'))

Out[23]: 
   A   B   C   D
0  10  10  10  10
1  11  11  11  11
2  12  12  12  12
3  13  13  13  13
4  14  14  14  14

现在我有一个零 3d 数组,我尝试用pandas dataframe.

b = np.empty(2,3,4)

维度是number_of_instances * 3 * number_of_features,其中由二维数组中的相应行索引number_of_features提取。pandas dataframe

理想情况下,我希望 b 看起来像:

Out[24]:
array([[[10, 10, 10, 10],
        [12, 12, 12, 12],
        [13, 13, 13, 13]],
       [[14, 14, 14, 14],
        [12, 12, 12, 12],
        [11, 11, 11, 11]]])

填充这个 3d 数组的最有效方法是什么?

标签: pythonarrayspython-3.xpandasnumpy

解决方案


怎么样:

df.loc[a.ravel()].values.reshape((2,3,4))

输出:

array([[[10, 10, 10, 10],
        [12, 12, 12, 12],
        [13, 13, 13, 13]],

       [[14, 14, 14, 14],
        [12, 12, 12, 12],
        [11, 11, 11, 11]]])

推荐阅读