如何根据分区将numpy 2d数组的行加在一起

时间:2018-05-22 07:01:34

标签: python arrays numpy sum reduce

我想知道什么是最快的方法,给定一个形状(n,m)numpy数组和一个形状(p)numpy数组描述0到n范围的分区(例如,n = 6的一个这样的分区将是:[0,2,4],意味着索引被分区为(0,1),(2,3),(4,5)),以返回一个形状(p,m)的numpy数组对应于每个分区的行总和在一起。

例如,

[[0,1,1,1],
 [2,0,1,1],
 [0,0,0,1],
 [5,1,0,0]]

如果分区[0,1]应该返回

[[0,1,1,1],
 [7,1,1,2]]

我已经有了构建矩阵的解决方案

[[1,0,0,0],
 [0,1,1,1]]

并将左边的初始矩阵乘以得到所需的矩阵,我认为该矩阵应该非常快,但我认为使用分区可能会有更快的内容涉及与numpy.reduceat(https://docs.scipy.org/doc/numpy/reference/generated/numpy.ufunc.reduceat.html)类似的东西阵列。有什么帮助吗?

等等......我刚刚阅读了reduceat文档,你可以真正做np.add.reduceat(matrix, partition, axis=0)。我记得以为你不能这样做。我认为这是因为对于我的应用程序,我需要为稀疏矩阵执行此操作。那么当输入的2d numpy数组是稀疏格式时,有人可以建议如何做到这一点吗?

0 个答案:

没有答案