У меня есть изображение в Numpy массива X:Заменить значения группы с группой в совокупности Numpy/панде
array([[ 0.01176471, 0.49019608, 0.01568627],
[ 0.01176471, 0.49019608, 0.01568627],
[ 0.00784314, 0.49411765, 0.00784314],
...,
[ 0.03921569, 0.08235294, 0.10588235],
[ 0.09411765, 0.14901961, 0.18431373],
[ 0.10196078, 0.15294118, 0.21568627]])
Я побежал алгоритм clusterizer над этим массивом, чтобы найти похожие цвета и иметь другой массив с классами для каждого пиксель Y:
array([19, 19, 19, ..., 37, 20, 20], dtype=int32)
Каких самые быстрые, хорошенький, и большинство pythonistic способов заменить цвет всех пикселей в кластере с среднем по этой группе?
Я придумал следующий код:
import pandas as pd
import numpy as np
<...>
df = pd.DataFrame.from_records(X, columns=list('rgb'))
df['cls'] = Y
mean_colors = df.groupby('cls').mean().values
# as suggested in comments below
# for cls in range(len(mean_colors)):
# X[Y==cls] = mean_colors[cls]
X = mean_colors[Y]
Есть ли способ сделать это только в панд или только в NumPy?
Предполагая, что 'Y' содержит все метки, как насчет простой индексации' mean_colors [Y] '? – Divakar
Для вашего примера ваш код не работает, потому что у вас есть «Y» 3 разных значения, и когда вы сравниваете «Y == cls», ничего не происходит, потому что в индексе нет ... (cls только равен 0 , 1, 2) –
@ Дивакар да, это красиво, спасибо! – Direvius