2010-10-11 3 views
0

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

Мое приложение находится в python 2.6, используя numpy и sciepy.

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

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

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

Я знаю, как вытащить все файлы csv и как написать вывод. Я просто не знаю наиболее эффективный способ структурирования потока данных в скрипте, в том числе, следует ли использовать массивы python или массивы numpy, а также как структурировать операции и т. Д.

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

ответ

2

Вы можете использовать masked arrays. Скажем, 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) 
Смежные вопросы