我正在玩 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 ]]
请注意,在堆叠期间的最后一步中,键转换为 float ,根据您的数据,您可能不希望这样做,但我这样做只是为了说明目的,以便发布一个“漂亮”的最终结果。
