【发布时间】:2020-07-10 14:36:30
【问题描述】:
我有一个很长的数组*,长度为 L(我们称之为 values),我想对其求和,以及一个相同长度的排序一维数组 L,其中包含 N 整数对原始数组进行分区——我们称这个数组为labels。
我目前正在做的是这个(module 是 cupy 或 numpy):
result = module.empty(N)
for i in range(N):
result[i] = values[labels == i].sum()
但这不是最有效的方法(应该可以摆脱for 循环,但如何?)。由于labels 已排序,我可以轻松确定断点并将这些索引用作开始/停止点,但我看不出这如何解决for 循环问题。
请注意,如果可能的话,我想避免创建大小为 NxL 的数组,因为 L 非常大。
我在 cupy 工作,但也欢迎任何 numpy 解决方案,并且可能会被移植。在 cupy 中,ReductionKernel 似乎就是这种情况,但我不太明白该怎么做。
* 在我的例子中,values 是一维的,但我认为解决方案不会依赖于此
【问题讨论】: