【发布时间】:2013-01-06 19:09:53
【问题描述】:
我想将二维scipy.sparse.csr.csr_matrix(我们称之为A)重塑为二维numpy.ndarray(我们称之为B)。
A 可能是
>shape(A)
(90, 10)
那么
B 应该是
>shape(B)
(9,10)
A 的每 10 行将被重新整形为一个新的新值,即此窗口和列的最大值。列运算符不适用于这种不可散列的稀疏矩阵类型。我怎样才能通过矩阵乘法得到这个B?
【问题讨论】:
-
我不认为矩阵乘法是最大值的选项,可能是sum。您是否考虑过使用支持列切片的 CSC 格式?
-
我想不出在稀疏数组上快速执行此操作的方法。但即使是
(9000, 1000)数组也可以在我的系统上处理大约100 ms处理rows, cols = sparse_mat.shape然后np.max(sparse_mat.toarray().reshape(rows // 10, 10, cols), axis=1)。 -
感谢 cmets,在我的情况下它需要几秒钟,因为矩阵要大得多。但是我将一些您没有的先验知识放入其中:行数大大超过了列数,因此我将遍历列,重塑每个列并计算最大值。这不是我想要的,但似乎没有什么比这更快了。
-
@MillaWell 你试过下面的答案了吗?
标签: python numpy scipy aggregate sparse-matrix