假设我有一个数组:
Values = np.array([0.221,0.35,25.9,54.212,0.0022])
Indices = np.array([22,10,11,22,10])
我想将“值”的元素添加在一起,这些元素在“索引”中共享相同的数字。
换句话说,我想要的输出:
Total = np.array([0.221+54.212,0.35+0.002,25.9])
Index = np.array([22,10,11])
我一直试图使用np.unique无济于事。不能完全弄清楚!
答案 0 :(得分:3)
我们可以使用np.unique
及其可选参数return_inverse
来基于Indices
中的唯一性获取ID,然后将它们与bincount
一起使用以进行分箱(基于ID)求和并因此解决它-
Index,idx = np.unique(Indices, return_inverse=True)
Total = np.bincount(idx, Values)
给定样本的输出-
In [32]: Index
Out[32]: array([10, 11, 22])
In [33]: Total
Out[33]: array([ 0.3522, 25.9 , 54.433 ])
或者,我们可以使用pandas.factorize
来获得唯一的ID,然后再进行bincount,如先前所示。因此,第一步可以被这样的东西代替-
import pandas as pd
idx,Index = pd.factorize(Indices)
答案 1 :(得分:1)
一种可能性是考虑使用Pandas:
In [14]: import pandas as pd
In [15]: pd.DataFrame({'Values': Values, 'Indices': Indices}).groupby('Indices').agg(sum)
Out[15]:
Values
Indices
10 0.3522
11 25.9000
22 54.4330
这应该是不言而喻的,尽管它并没有保留索引的顺序(从这个问题上您是否在乎它还不是很清楚)。