我有一个大约有 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 轴堆叠的数组的组合。考虑到大小,我显然试图避免循环,但我在思考有效的、甚至只是不是超慢的方法来完成这个任务时却一片空白。
找到了一个相当快速的单行解决方案:
cube_data = df_in.values[:, :, None] + df_in.values[:, None, :] + df_in.values[None, :, :]