我正在玩NumPy
和Scipy
,但在文档中找不到功能时遇到问题。因此,我想知道是否有人可以提供帮助。
假设我在NumPy
中有一个包含两列和k
行的数组。一栏用作数字指示符(例如2 = male
,1 = female
,0 = unknown
),而第二栏则可能是值或分数的list
。
可以说,我想为指标为0的所有行,然后为1,最后是2,找到值的标准偏差(可以是均值,或其他,我只想应用一个函数)。
是否有预定义的函数可以为我合成这些?
在R
中,等效项可以在plyr
包中找到。 NumPy
和/或Scipy
是否具有等效项,还是我坚持为该数组创建一个掩码,然后以某种方式过滤该掩码,然后应用我的函数?
一如既往,感谢您的帮助!
最佳答案
如果我了解您的描述,那么您就有一个类似以下的数据集:
In [79]: x=np.random.randint(0,3,size=100)
In [80]: y=np.random.randint(0,100,size=100)
In [81]: d=np.vstack([x,y]).T
In [88]: print d[:5,:]
[[ 0 43]
[ 1 60]
[ 2 60]
[ 1 4]
[ 0 30]]
在这种情况下,
numpy.unique
可用于生成唯一的“键”值的数组:In [82]: idx=np.unique(d[:,0])
In [83]: print idx
[0 1 2]
以及用于驱动生成器表达式的值如下:
[113]: g=(d[np.where(d[:,0]==val),1].std() for val in idx)
生成器
g
将发出与索引中的每个条目匹配的d
中所有条目的标准偏差。然后可以使用numpy.fromiterator
收集结果:In [114]: print np.vstack([idx,np.fromiter(g,dtype=np.float)]).T
[[ 0. 26.87376385]
[ 1. 29.41046084]
[ 2. 24.2477246 ]]
请注意,在堆栈的最后一步中,将键转换为浮点,您可能不希望根据数据而定,但是出于说明目的,我这样做是为了使最终结果看起来“不错”。
关于python - 根据列值和变量合成一个numpy数组/矩阵?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7252851/