从 2D 数据的索引和创建 3D python 数据

问题描述 投票:0回答:1

我有一个大约有 400 行和列的对称数据框。我想通过取三个 X、Y、Z 索引之间每对的总和,将其转换为 3 维对象(立方体)。

例如,假设立方体上的坐标是 A-B-C,我会取 2D 数据框/数组中以下单元格的总和:A-B、B-C、A-C。再次记住,因为它是对称的,所以第一个或第二个索引是行还是列在这里并不重要。

这是数据的 3x3 快照:

        #   A   B   C
df_in = [[  1,  5,  2], # A
         [  5,  1,  3], # B
         [  2,  3,  1]] # C

然后这些将是组成输出立方体的 3 个平面:

          #   A   B   C
outputA = [[  3, 11,  5], # A
           [ 11, 11, 10], # B
           [  5, 10,  5]] # C
          #   A   B   C
outputB = [[ 11, 11, 10], # A
           [ 11,  3,  7], # B
           [ 10,  7,  7]] # C
          #   A   B   C
outputC = [[  5, 10,  5], # A
           [ 10,  7,  7], # B
           [  5,  7,  3]] # C

所以最终立方体将是这三个沿 Z 轴堆叠的数组的组合。考虑到大小,我显然试图避免循环,但我在思考有效的、甚至只是不是超慢的方法来完成这个任务时却一片空白。

python pandas dataframe numpy 3d
1个回答
0
投票

找到了一个相当快速的单行解决方案:

cube_data = df_in.values[:, :, None] + df_in.values[:, None, :] + df_in.values[None, :, :]
© www.soinside.com 2019 - 2024. All rights reserved.