Эффективное переключение между элементами массива в python - PullRequest
1 голос
/ 12 сентября 2011

Я пытаюсь эффективно суммировать элементы отдельного массива данных по их характеристикам. У меня есть три идентифицирующие характеристики (возраст, год и причина) в данном массиве, и для каждого возраста, года, причины у меня есть 1000 значений. Мне нужно добавить эти значения в другой массив данных, когда характеристики совпадают. Сейчас я делаю что-то вроде этого, где каждый набор данных равен ~ (80000, 1000):

import numpy as np
datasets = np.vstack(dataset1, dataset2)
for a in ages:
    for y in years:
        for c in causes:
             output = np.sum(datasets[(age==a) & (year==y) & (cause==c)], axis = 0)

Однако при 60000 итерациях это невероятно медленно. Проблема в том, что массивы не обязательно имеют одинаковую форму. Какие-нибудь мысли?

Ответы [ 2 ]

2 голосов
/ 12 сентября 2011

Я бы порекомендовал что-то вроде accmarray. Выходными данными должен быть трехмерный куб данных, в котором каждому измерению соответствует переменная (возраст, год, причина). Каждый индекс в каждом измерении соответствует уникальному значению в ваших входных списках. Затем вы можете использовать что-то вроде примера поваренной книги , чтобы накапливать переменные наборов данных в соответствующие ячейки, используя возраст, год и причину.

Вы также можете рассмотреть возможность использования правильной реляционной базы данных. Они довольно быстры в таких вещах. Python поставляется с sqlite3 как часть ядра. К сожалению, это довольно крутая кривая обучения, если вы никогда раньше не работали с реляционной базой данных. Вы захотите использовать функции group и aggregate.

0 голосов
/ 19 сентября 2011

см. Ссылку ниже

Я не уверен, как правильно связать другой ответ с этим ответом. Когда я попробовал одно предложение, за которым следовала ссылка, он преобразовал ответ в комментарий. Теперь я стараюсь заставить переполнение стека думать, что этот текст достаточно длинный, чтобы дать ответ. Вот ссылка на отличный ответ на этот вопрос.

Суммирование массивов по характеристикам в Python

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