#python #arrays #numpy #performance
Вопрос:
У меня есть задача эффективно и красиво вычислить сумму. У меня есть два массива
dst = [[1 2 3 4 5]
[2 3 4 5 6]
[1 1 2 2 3]
[7 8 9 9 3]]
и
ids = [[1 1 2 1 3]
[2 2 1 1 3]
[3 3 2 1 1]
[2 2 1 3 3]
[1 2 3 2 1]]
Для каждой строки в dst мне нужно вычислить сумму уникальных элементов в идентификаторах и вернуть максимальное значение суммы и количество индексов.
Example for first row: I have 3 unique number in ids in first row [1,2,3].
indices for 1 = [0,1,3] for 2 = [2] for 3 = [4]
For 1: sum is sum of dst[0][0] dst[0][1] dst[0][3] = 1 2 4 = 7.
For 2: sum is dst[0][2] = 3
For 3: sum is dst[0][4] = 5.
max(sum) = 7
number = 3
Total: [3,7] - for first row
Я понятия не имею, как это сделать с помощью функции Numpy эффективно и легко. Я сделал это с помощью классического python, но это решение работает слишком медленно.
Комментарии:
1. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.
2. в вашем примере
ids
это больше, чемdst
. Если это не ошибка, то я не понял вашей проблемы.
Ответ №1:
Вы можете попробовать получить уникальные индексы следующим образом:
indices = [np.unique(row) for row in ids]
а затем подсчитайте суммы:
sums = [np.sum(dst[i][indices[i]]) for i in range(len(dst))]
Комментарии:
1. Я забыл отметить: я не могу использовать циклы
2. Так вы имеете в виду, что понимание списка считается циклами?