numpy中许多矩阵的计算方法

时间:2010-10-11 09:29:15

标签: python arrays numpy mean

我有很多csv文件,每个文件都包含大致相同的矩阵。每个矩阵是11列,5行或6行。列是变量,行是测试条件。一些矩阵不包含最后一个测试条件的数据,这就是为什么某些矩阵中有5行而其他矩阵中有6行的原因。

我的应用程序是使用numpy和sciepy在python 2.6中。

我的问题是:
如何最有效地创建一个汇总矩阵,其中包含所有相同矩阵中每个单元格的均值?

汇总矩阵将具有与所有其他矩阵相同的结构,除了汇总矩阵中每个单元格中的值将是存储在所有其他矩阵中的相同单元格中的值的平均值。如果一个矩阵不包含最后一个测试条件的数据,我想确保在完成平均时其内容不被视为零。换句话说,我想要所有非零值的平均值。

任何人都可以向我展示一种简单,灵活的方式来组织这些代码,以便尽可能少地执行我想做的所有事情,并且在我想要的情况下保持尽可能灵活 - 稍后将其与其他数据结构一起使用?

我知道如何提取所有csv文件以及如何编写输出。我只是不知道在脚本中构造数据流的最有效方法,包括是否使用python数组或numpy数组,以及如何构造操作等。

我尝试过以多种不同的方式对其进行编码,但如果我以后想将此代码用于其他数据结构,它们似乎都是代码密集且不灵活的。

1 个答案:

答案 0 :(得分:2)

您可以使用masked arrays。假设N是csv文件的数量。您可以将所有数据存储在形状为(N,11,6)的蒙版数组A中。

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)