结合numpy数组和掩蔽

时间:2012-07-12 18:16:38

标签: python arrays numpy

我有以下问题。知道numpy我可以用genfromtext读取数据文件。然后,我可以使用掩码(来自字典)从中选择记录。

>>> gln = a[a['AA2'] == 'GLN']
>>> gln['mean'].mean()
62.805000305175781

如何使用数组组合而不是从磁盘读取数据?

x=[]
y=[]
ov=[]
aa=[]

a = numpy.array(x,y,ov,aa)         <== does not actually work
gln = a[a[3] == 'GLN']
gln['mean'].mean()

我如何让这个工作?

1 个答案:

答案 0 :(得分:0)

请记住,在Python中,[]生成的对象通常称为list,而不是array。因此,考虑到这一点,我假设您真正的问题是“我如何将4个独立的python list转换为2维numpy数组?”

答案取决于您希望如何在数组中布置list。假设每个列表代表一行,您可以这样做:

>>> x = range(0, 4)
>>> y = range(4, 8)
>>> ov = range(8, 12)
>>> aa = range(12, 16)
>>> numpy.array([x, y, ov, aa])
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

或者,如果每个列表代表一列,您可以这样做:

>>> numpy.array(zip(x, y, ov, aa))
array([[ 0,  4,  8, 12],
       [ 1,  5,  9, 13],
       [ 2,  6, 10, 14],
       [ 3,  7, 11, 15]])

然后,您可以像使用array生成的genfromtxt一样使用布尔索引:

>>> a = numpy.array(zip(x, y, ov, aa))
>>> a[a == 1]
array([ 1,  5,  9, 13,  3,  7, 11, 15])

您可能正在寻找将xyovaa合并到数组中的其他方法。在这种情况下,您将不得不指定列表中的内容和所需输出的形状。