Вычисление средних многих матриц в NumPy - PullRequest
0 голосов
/ 11 октября 2010

У меня есть много CSV-файлов, каждый из которых содержит примерно одинаковые матрицы. Каждая матрица состоит из 11 столбцов по 5 или 6 строк. Столбцы являются переменными, а строки - условиями тестирования. Некоторые из матриц не содержат данных о последнем тестовом условии, поэтому в одних матрицах имеется 5 строк, а в других - шесть строк.

Мое приложение в Python 2.6 с использованием numpy и sciepy.

Мой вопрос такой:
Как наиболее эффективно создать сводную матрицу, которая содержит средние значения каждой ячейки для всех идентичных матриц?

Сводная матрица будет иметь ту же структуру, что и все другие матрицы, за исключением того, что значение в каждой ячейке в сводной матрице будет представлять собой среднее значение, хранящееся в идентичной ячейке для всех других матриц. Если одна матрица не содержит данных для последнего условия теста, я хочу удостовериться, что ее содержимое не будет обрабатываться как нули при выполнении усреднения. Другими словами, я хочу получить все ненулевые значения.

Может кто-нибудь показать мне краткий, гибкий способ организации этого кода таким образом, чтобы он делал все, что я хочу, с как можно меньшим количеством кода, а также оставался максимально гибким на случай, если я захочу - использовать это позже с другими структурами данных?

Я знаю, как вытащить все CSV-файлы и как записать вывод. Я просто не знаю наиболее эффективного способа структурирования потока данных в сценарии, в том числе о том, использовать ли Python-массивы или массивы NumPy и как структурировать операции и т. Д.

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

1 Ответ

2 голосов
/ 11 октября 2010

Вы можете использовать маскированные массивы . Скажи N это количество CSV-файлов. Вы можете хранить все свои данные в замаскированном массиве A формы (N, 11,6).

from numpy import *
A = ma.zeros((N,11,6))
A.mask = zeros_like(A) # fills the mask with zeros: nothing is masked
A.mask = (A.data == 0) # another way of masking: mask all data equal to zero
A.mask[0,0,0] = True # mask a value
A[1,2,3] = 12. # fill a value: like an usual array

Тогда средние значения вдоль первой оси и с учетом маскированных значений определяются как:

mean(A, axis=0) # the returned shape is (11,6)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...