Я хочу найти быстрый способ (без цикла) в Python, чтобы назначить reoccuring индексы массива. Это желаемый результат, используя для цикла:Назначение одинаковых индексов массива сразу в Python/Numpy
import numpy as np
a=np.arange(9, dtype=np.float64).reshape((3,3))
# The array indices: [2,3,4] are identical.
Px = np.uint64(np.array([0,1,1,1,2]))
Py = np.uint64(np.array([0,0,0,0,0]))
# The array to be added at the array indices (may also contain random numbers).
x = np.array([.1,.1,.1,.1,.1])
for m in np.arange(len(x)):
a[Px[m]][Py[m]] += x
print a
%[[ 0.1 1. 2.]
%[ 3.3 4. 5.]
%[ 6.1 7. 8.]]
Когда я пытаюсь добавить x
к a
в индексах Px,Py
я, очевидно, не получить тот же результат (3.3 против 3.1):
a[Px,Py] += x
print a
%[[ 0.1 1. 2.]
%[ 3.1 4. 5.]
%[ 6.1 7. 8.]]
Есть ли способ сделать это с помощью numpy? Благодарю.
Прежде всего, я бы группировать значения вместе, так что у вас есть список кортежей (Px, Py). Затем сортируйте этот список, подсчитайте вхождения, умножьте x на это число и добавьте в массив. Но как-то numpy, похоже, пропускает двойные записи ... странно. – Dschoni