我有两个numpy数组,一个包含值,一个包含每个值类别。在
values=np.array([1,2,3,4,5,6,7,8,9,10])
valcats=np.array([101,301,201,201,102,302,302,202,102,301])
我有另一个数组,其中包含我想求和的唯一类别。在
^{pr2}$我的问题是,我将运行同样的求和过程几十亿次,每微秒都很重要。在
我目前的实现如下。在
catsums=[]
for x in categories:
catsums.append(np.sum(values[np.where(valcats==x)]))
产生的CATSUM应为:
[1, 14, 7, 8, 12, 13]
我当前的运行时间大约是5µs。我对Python还是个新手,希望通过结合前两个数组或lamdba或一些我甚至不知道的很酷的东西来找到一个快速的解决方案。在
谢谢你的阅读!在
@Divakar刚刚发布了一个非常好的答案。如果已经定义了类别数组,我将使用@Divakar的答案。如果你没有已经定义的唯一值,我会用我的。在
我将使用^{} 来分解类别。然后使用^{} ,并将
weights
参数设置为values
数组
^{pr2}$pd.factorize
还生成u
变量中的唯一值。我们可以将结果与u
对齐,以确定我们得到了正确的解决方案。在您可以使用
pd.Series
使其更加明显为什么
pd.factorize
而不是np.unique
?我们可以用
但是,
np.unique
对值进行排序,并在nlogn
时间内运行。另一方面,pd.factorize
不排序,并且以线性时间运行。对于较大的数据集,pd.factorize
将主导性能。在您可以使用
searchsorted
和bincount
-相关问题 更多 >
编程相关推荐