2016-11-19 48 views
2

我有两个numpy的阵列用的ID从另一个阵列进行基于ID平均一个数组 - NumPy的

A= np.array([1,1,1,1,0,0,0,0,0,1]) 
B= np.array([2,2,2,2,32,1,12,124,1,2) 
C= #mean of B's elements where A is 1 
D= #mean of B's elements where A is 0 

我怎样才能做到这一点?我认为这是np.meannp.ma的组合,但我不明白如何用面罩计算平均值?

回答

3

可以使用np.bincount当你可能会和其他这样的IDS /标签A打交道,像这样一个通用的情况下 -

np.bincount(A,B)/np.bincount(A) 

基本上,np.bincount(A,B)给我们的ID的B,其中基于求和ID是从A。然后,我们将这些总和除以每组ID的计数以获得每个ID组的平均值。

采样运行 -

In [12]: A 
Out[12]: array([1, 1, 1, 1, 0, 0, 0, 0, 0, 1]) 

In [13]: B 
Out[13]: array([ 2, 2, 2, 2, 32, 1, 12, 124, 1, 2]) 

In [14]: B[A==0].mean() # Using boolean indexing per ID and getting avg 
Out[14]: 34.0 

In [15]: B[A==1].mean() 
Out[15]: 2.0 

In [16]: np.bincount(A,B)/np.bincount(A) 
Out[16]: array([ 34., 2.]) 
相关问题