【发布时间】:2017-07-02 16:34:40
【问题描述】:
我一直在尝试将 python scipy 稀疏矩阵除以其行的向量和。这是我的代码
sparse_mat = bsr_matrix((l_data, (l_row, l_col)), dtype=float)
sparse_mat = sparse_mat / (sparse_mat.sum(axis = 1)[:,None])
但是,无论我如何尝试,它都会引发错误
sparse_mat = sparse_mat / (sparse_mat.sum(axis = 1)[:,None])
File "/usr/lib/python2.7/dist-packages/scipy/sparse/base.py", line 381, in __div__
return self.__truediv__(other)
File "/usr/lib/python2.7/dist-packages/scipy/sparse/compressed.py", line 427, in __truediv__
raise NotImplementedError
NotImplementedError
有人知道我哪里出错了吗?
【问题讨论】:
-
划分调用true_division,这是一个元素划分。这似乎没有为多个值实现。因此,
(sparse_mat.sum(axis = 1)[:,None]的结果很可能不是一个数字。 -
@Dschoni 是的,结果是一个向量,我的目标是将稀疏矩阵每一行中的每个元素除以行元素的总和。所以如果 M=[[2,4],[1,2]],我想得到 Ans=[[2/6, 4/6],[1/3, 2/3]]。
-
你试过
sparse_mat = sparse_mat*(1 / (sparse_mat.sum(axis = 1)[:,None]))。稀疏矩阵的划分似乎是问题所在。您可能还需要将除数转换为密集数组sparse_mat = sparse_mat*(1 / (sparse_mat.sum(axis = 1).toarray()[:,None])) -
@uchman21 请提供一个独立的小例子。此问题可能与您放入矩阵的数据有关。 (或者可能是你的 scipy 太旧了——我尝试过的稀疏矩阵除法适用于 Python 3 和 scipy 0.18。)
-
我正在使用 python 2.7.13 和 scipy 0.18。该矩阵只是一个 232 x 232 的简单稀疏矩阵
标签: python numpy scipy sparse-matrix