2012-07-12 56 views
1

我有以下问题。在知道与numpy我可以阅读genfromtext数据文件。然后我可以用掩码(从字典中)选择记录。结合numpy阵列和掩模

>>> 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() 

我如何得到这个工作?

回答

0

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

答案取决于您希望list s如何排列在阵列中。假设每个列表代表一排,你可以这样做:

>>> 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]]) 

然后,你可以只使用布尔索引你与genfromtxt产生的array做:

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

这可能是你正在寻找合并x的一些其他的方式,y,ovaa组成一个数组。在这种情况下,您将不得不指定列表中的内容和所需输出的形状。

+0

我在这里得到一个类型错误。 TypeError:不支持的操作数类型为%:'numpy.ndarray'和'int' – tarrasch 2012-07-13 09:19:51

+0

@tarrasch,我没有这个问题。你使用的是哪种版本的numpy? 'numpy.version.version'的价值是什么?但'%'是无关紧要的 - 这只是生成布尔数组的一种快速方法。 – senderle 2012-07-13 09:40:03

+0

没关系。看起来我很愚蠢。你能改变你的例子到[a == 1]吗? %符号混淆了我的系统,导致该示例无法正常工作。谢谢你指出。公认。 – tarrasch 2012-07-13 09:42:39