Мы могли бы использовать np.unique
, чтобы пометить каждый уникальный цвет, а затем bincount
, чтобы получить помеченные средние значения -
In [145]: u,t = np.unique(coords_array, axis=0, return_inverse=True)
# Unique avg colors
In [146]: u
Out[146]:
array([[127, 130, 130],
[128, 131, 132]])
# Avg values
In [147]: np.bincount(t, values_array)/np.bincount(t)
Out[147]: array([3., 6.])
Или дополнительно, использовать return_counts
arg, чтобы получить счет непосредственно -
In [156]: u,t,c = np.unique(coords_array, axis=0, return_inverse=True, return_counts=True)
In [159]: np.bincount(t, values_array)/c
Out[159]: array([3., 6.])
Итак, если вам нужно назначить эти средние значения в трехмерный массив a
, просто выполните -
a[tuple(u.T)] = avg # avg are average values from bincount output