ufunc.at用于目标索引是唯一的情况(然后可以缓冲调用)

时间:2016-11-10 09:19:25

标签: python numpy

我使用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调用此缓冲/无缓冲操作。

具有唯一目标索引的缓冲版本是否有类似的语法?(基本上只是为了方便和更一致的代码。)

0 个答案:

没有答案