#python #arrays #numpy #indexing #duplicates
Вопрос:
У меня есть массив numpy X, который я инициализирую:
X = np.ones(10) * 100
и у меня есть массив индексов для X:
I = np.array([2,5,2,1,7,8,5,2])
и, наконец, массив значений для присвоения X по индексам I:
V = np.array([4,3,5,2,6,2,4,1])
Каков наиболее эффективный способ присвоения значений массиву X, гарантируя, что при наличии повторяющихся индексов в I присваивается минимальное соответствующее значение в V.
То есть я хотел бы, чтобы конечное значение X было:
[100, 2, 1, 100, 100, 3, 100, 6, 2, 100]
Есть ли векторизованный способ сделать это? Или метод, который был бы эффективен для больших массивов? т. Е. Могу ли я избежать использования цикла? Спасибо!
Ответ №1:
Это работает:
vs = np.argsort(v)
uniq_idx, uniq_vs_idx = np.unique(i[vs], return_index=True)
x[uniq_idx] = v[vs][uniq_vs_idx]