Numpy -计算组平均值

wfauudbj  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(191)

我有一个形状为(N,3)的数组,例如:

arr = np.array(
  [
    [0,1,1], 
    [0,1,2], 
    [2,2,2]
  ]
)

我想按前两列对这个数组进行分组,以获得如下所示的数组

grouped_arr = np.array([[[0,1,1], [0,1,2]], [[2,2,2]]])

最后,我想得到只有一个元素组,而第三列将是平均组第三列

final_array = np.array([[0,1,1.5], [2,2,2]])

我正在尝试一些东西,但不确定它是否正确,是否是实现它的有效方法:

import numpy as np

arr = np.array([[0,1,1], [0,1,2], [2,2,2]])

stacked = np.vstack((arr[:,0], arr[:,1])).transpose()
uniques_values = np.unique(stacked, axis=0)

groups = []
for v in uniques_values:
    groups.append(arr[v])

final_arr = []
for group in groups:
    mean = np.mean(group[:,2], axis=0)
    final_arr.append(np.array([group[0][0], group[0][1], mean]))

print(final_arr)

>>>[array([0. , 1. , 1.5]), array([2., 2., 2.])]

我正在寻找一个可靠和有效的建议。在我的真实的数据的dtype是浮动

w9apscun

w9apscun1#

您的“分组”实际上只是普通的切片:

import numpy as np

arr = np.array((
    (0,1,1),
    (0,1,2),
    (2,2,2),
))

final_array = np.vstack((
    arr[:2].mean(axis=0),
    arr[2],
))

print(final_array)
[[0.  1.  1.5]
 [2.  2.  2. ]]

相关问题