0

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

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

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

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

任何人都可以向我展示一种简短、灵活的方式来组织此代码,以便它使用尽可能少的代码完成我想做的所有事情,并且尽可能保持灵活性,以防我以后想在其他数据结构中重新使用它?

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

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

4

1 回答 1

2

您可以使用掩码数组。说 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)
于 2010-10-11T12:09:35.190 回答