Arsenal estructurado de la media de Numpy
Supongamos que tengo una variedad estructurada de estudiantes (cadenas) y calificaciones de exámenes (ints), donde cada entrada es la puntuación que un estudiante específico recibió en una prueba específica. Cada estudiante tiene múltiples entradas en esta matriz, naturalmente.
Ejemploimport numpy
grades = numpy.array([('Mary', 96), ('John', 94), ('Mary', 88), ('Edgar', 89), ('John', 84)],
dtype=[('student', 'a50'), ('score', 'i')])
print grades
#[('Mary', 96) ('John', 94) ('Mary', 88) ('Edgar', 89) ('John', 84)]
¿Cómo puedo calcular fácilmente el puntaje promedio de cada estudiante? En otras palabras, ¿cómo tomo la media de la matriz en la dimensión 'puntuación'? Me gustaria hacer
grades.mean('score')
y tener el regreso de Numpy
[('Mary', 92), ('John', 89), ('Edgar', 89)]
pero Numpy se queja
TypeError: an integer is required
¿Hay una manera Numpy-esque para hacer esto fácilmente? Creo que podría implicar tener una vista de la matriz estructurada con un tipo de dty diferente. Cualquier ayuda sería apreciada. Gracias.
Editar>>> grades = numpy.zeros(5, dtype=[('student', 'a50'), ('score', 'i'), ('testid', 'i'])
>>> grades[0] = ('Mary', 96, 1)
>>> grades[1] = ('John', 94, 1)
>>> grades[2] = ('Mary', 88, 2)
>>> grades[3] = ('Edgar', 89, 1)
>>> grades[4] = ('John', 84, 2)
>>> np.mean(grades, 'testid')
TypeError: an integer is required