我想知道什么是最快的方法,给定一个形状(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数组是稀疏格式时,有人可以建议如何做到这一点吗?