我使用ufunc.at
类似于稀疏矩阵乘法或更好,作为图中的流。 c[:, 0]
表示目标索引,其中源索引c[:, 1]
表示的每个元素将被汇总
c = np.array([[0, 1], [0, 2], [1, 1]) # sum up 1 and 2 into 0, and 1 into 1
src = ... # source vector
targ = ... # target vector, not necessarily 0 in the beginning
np.add.at(targ, c[:, 0], src[c[:, 1]]) # sum up into bins
也可以这样写:
targ[c[:, 0]] += src[c[:, 1]]
这种方法只有在所有目标指数c [:,0]都是唯一的情况下才有效,否则就会出现一些竞争条件。我也期望,它更快一点,因为它不需要在内部关注积累,但可以只做一次“一次拍摄”。此外,在矢量化方面,更有效的方法是什么。 Numpy调用此缓冲/无缓冲操作。
具有唯一目标索引的缓冲版本是否有类似的语法?(基本上只是为了方便和更一致的代码。)