2014-10-20 1 views
1

У меня есть словарь матриц.Элементно-медианный много матриц, python pandas

Словарь называется dict.

dict[location] 

возвращает квадратный квадрат данных n x n для этого местоположения.

locations 

- это список всех мест. (Ключи в словаре).

Я хочу по существу сделать список каждого компонента i, j в кадре данных через ключи и взять медиану всех этих. Вы можете думать об этом как о суммировании матриц друг на друге и о среднем значении для каждого элемента i, j. Надеюсь, я объяснил это достаточно четко.

Мне было интересно, есть ли умный способ сделать это. Я хотел бы избежать составления списка n (n + 1)/2 уникальных i-мерных пар, а затем взять медианы, а затем вернуть их в нужное место в финальной медианной матрице (dataframe).

+1

Вы можете использовать numpy.median на одном (3D) массиве, создаваемом путем укладки всех матриц. – mdurant

ответ

2

Это, как представляется, работает хорошо и эффективно.

numpy.median(dict.values(),axis=0) 

В общем случае медиане требуется все данные в памяти, если только вы не хотите получить оценку. Поэтому для большого объема данных вам придется работать в кусках:

numpy.median([m[0:10,0:10], for m in dict.values()], axis=0) 
+0

Хмм, у меня 117 клавиш, каждая матрица 76 х 76. Dict.values ​​() работает, но когда я использую numpy.median, компьютер падает. – robertevansanders

+0

Наконец, он закончил загрузку: это была ошибка: ValueError: Значение истины DataFrame неоднозначно. Используйте a.empty, a.bool(), a.item(), a.any() или a.all() – robertevansanders

+1

Я думал, что у вас есть словарь, а не фреймворк данных. – mdurant