отображение массива и взять среднее - PullRequest
3 голосов
/ 13 января 2011

У меня есть три массива

import numpy as np
value = np.array ([1, 3, 3, 5, 5, 7, 3])
index = np.array ([1, 1, 3, 3, 6, 6, 6])
data  = np.array ([1, 2, 3, 4, 5, 6])

Массивы "index" и "value" имеют одинаковый размер, и я хочу сгруппировать элементы в "value", взяв среднее значение.Например: для первых двух элементов [1, 3, ... в «значении» используйте один и тот же ключ 1 в «индексе», поэтому для окончательного массива значение является средним значением 1-го и 2-го элементов в значении:(1 + 3) / 2, что равно 2

Конечный массив:

[2, nan, 4, nan, nan, 5]

первое значение является средним значением 1-го и 2-го числа "значения"
второе значение являетсяnan, потому что нет никакого ключа в «index» (нет «2» в индексе массива)
третье значение - это среднее от 3-го и 4-го значения «value» ...

Спасибо за вашу помощь!!!

С уважением, Рой

Ответы [ 4 ]

3 голосов
/ 13 января 2011

Может быть, вы хотели бы использовать numpy.bincount()?

value = np.array([1, 3, 3, 5, 5, 7, 3])
index = np.array([1, 1, 3, 3, 6, 6, 6])
np.bincount(index, value) / np.bincount(index)
# array([ NaN,   2.,  NaN,   4.,  NaN,  NaN,   5.])
3 голосов
/ 13 января 2011
>>> [value[index==i].mean() for i in data]
[2.0, nan, 4.0, nan, nan, 5.0]
0 голосов
/ 13 января 2011

Я искал использование гистограммы numpy для решения огромного массива:

value = np.array ([1, 3, 3, 5, 5, 7, 3], dtype = 'float')
index = np.array ([1, 1, 3, 3, 6, 6, 6], dtype = 'float')
data = np.array ([1, 2, 3, 4, 5, 6])

суммы = гистограмма np (индекс, bins = np.arange (index.min (), index.max () + 2), вес = значение) [0]
counter = np.histogram (index, bins = np.arange (index.min (), index.max () + 2)) [0]

суммы / счетчик

массив ([2., NaN, 4., NaN, NaN, 5.])

0 голосов
/ 13 января 2011

Это общая идея, которую вы ищете?

import numpy as np
value = np.array ([1, 3, 3, 5, 5, 7, 3])
index = np.array ([1, 1, 3, 3, 6, 6, 6])
data  = np.array ([1, 2, 3, 4, 5, 6])

answer = np.array(data, dtype=float)
for i, e in enumerate(data):
    idx = np.where(index==e)[0]
    val = value[idx]
    answer[i] = np.mean(val)

print answer # [  2.  nan   4.  nan  nan   5.]

Если ваш массив data очень большой, возможно, найдутся лучшие решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...