我正在玩NumPyScipy,但在文档中找不到功能时遇到问题。因此,我想知道是否有人可以提供帮助。

假设我在NumPy中有一个包含两列和k行的数组。一栏用作数字指示符(例如2 = male1 = female0 = 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/

10-11 22:29
查看更多