使用列表列表对numpy数组中的行进行平均

时间:2018-11-30 08:00:59

标签: python arrays numpy

我想使用列表(python)列表中条目的信息来平均numpy数组的行。例如,考虑以下内容:

LoL = [[], [0, 1, 2, 4], [3, 5], [], [6]]  #List of lists
arr = np.array([[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5], [6, 6, 6, 6]])  #Numpy array
print arr

[[0 0 0 0]
 [1 1 1 1]
 [2 2 2 2]
 [3 3 3 3]
 [4 4 4 4]
 [5 5 5 5]
 [6 6 6 6]]

对于以上列表(LoL)和numpy数组(arr)的列表,我希望对[0, 1, 2, 4]的第arr行进行平均,第{{1 [3, 5]中的}}进行平均,并与行arr之间保持平均状态。转换后的数组([6])应该如下所示:

arr_new

最优雅的方法是什么?

1 个答案:

答案 0 :(得分:1)

由于listlist的形状不一致,因此没有一种优雅的方法可以执行单个操作,但是循环是一种选择,并且应该仍然有效,因为仅按LoL的大小缩放:


np.stack([np.mean(arr[el], 0) for el in LoL if el])

array([[1.75, 1.75, 1.75, 1.75],
       [4.  , 4.  , 4.  , 4.  ],
       [6.  , 6.  , 6.  , 6.  ]])