Эффективный способ получения общего количества баллов вместе с numpy.unique() ⇐ Python
Эффективный способ получения общего количества баллов вместе с numpy.unique()
Моя задача заключается в следующем:
Каждая строка меток представляет идентификаторы учащихся, получивших награды на определенном конкурсе. Каждое соревнование имеет разные весовые коэффициенты, которые задаются весами.
баллыучащихся рассчитываются как взвешенное количество полученных ими наград. На данный момент у меня есть следующее:
импортировать numpy как np метки = np.array([ [0,1,5], [0,1,3], [2,4,5]]) веса = np.array([ [1], [2], [4]]) c_labels = np.concatenate(метки) c_weights = np.concatenate(np.broadcast_to(weights,(3,3))) uni, inv = np.unique(c_labels,return_inverse=True) оценки = np.zeros(len(uni)) потому что я в универе: оценки = np.sum(c_weights[inv==i]) распечатать (баллы) Выше я упростил свою задачу как проблему оценки учащихся, чтобы объяснить ее ясно. Это часть моей более крупной задачи, и для продолжения мне нужно сгенерировать уникальный массив labels и соответствующий массив scores.
Реальный размер данных огромен, и мне нужно повторять это много раз, поэтому я не могу использовать циклы for, поскольку это занимает слишком много времени. Мне хотелось бы перейти на более эффективный способ (т. е. каким-то образом заменить последний цикл for на операцию массива), но я не знаю, как это сделать. Любое предложение будет оценено.
Моя задача заключается в следующем:
Каждая строка меток представляет идентификаторы учащихся, получивших награды на определенном конкурсе. Каждое соревнование имеет разные весовые коэффициенты, которые задаются весами.
баллыучащихся рассчитываются как взвешенное количество полученных ими наград. На данный момент у меня есть следующее:
импортировать numpy как np метки = np.array([ [0,1,5], [0,1,3], [2,4,5]]) веса = np.array([ [1], [2], [4]]) c_labels = np.concatenate(метки) c_weights = np.concatenate(np.broadcast_to(weights,(3,3))) uni, inv = np.unique(c_labels,return_inverse=True) оценки = np.zeros(len(uni)) потому что я в универе: оценки = np.sum(c_weights[inv==i]) распечатать (баллы) Выше я упростил свою задачу как проблему оценки учащихся, чтобы объяснить ее ясно. Это часть моей более крупной задачи, и для продолжения мне нужно сгенерировать уникальный массив labels и соответствующий массив scores.
Реальный размер данных огромен, и мне нужно повторять это много раз, поэтому я не могу использовать циклы for, поскольку это занимает слишком много времени. Мне хотелось бы перейти на более эффективный способ (т. е. каким-то образом заменить последний цикл for на операцию массива), но я не знаю, как это сделать. Любое предложение будет оценено.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Группирование полного списка баллов с использованием упрощенных баллов, включительно?
Anonymous » » в форуме Python - 0 Ответы
- 2 Просмотры
-
Последнее сообщение Anonymous
-