use*_*291 1 python numpy scipy sparse-matrix
我想将 csr_matrix 的每一行除以该行中非零条目的数量。
例如:考虑一个 csr_matrix A:
A = [[6, 0, 0, 4, 0], [3, 18, 0, 9, 0]]
Result = [[3, 0, 0, 2, 0], [1, 6, 0, 3, 0]]
Run Code Online (Sandbox Code Playgroud)
什么是最短和有效的方法呢?
使用getnnz方法获取计数,然后复制并原地划分为使用data方法获得的扁平视图-
s = A.getnnz(axis=1)
A.data /= np.repeat(s, s)
Run Code Online (Sandbox Code Playgroud)
灵感来自Row Division in Scipy Sparse Matrix 's solution post : Approach #2.
样品运行 -
In [15]: from scipy.sparse import csr_matrix
In [16]: A = csr_matrix([[6, 0, 0, 4, 0], [3, 18, 0, 9, 0]])
In [18]: s = A.getnnz(axis=1)
...: A.data /= np.repeat(s, s)
In [19]: A.toarray()
Out[19]:
array([[3, 0, 0, 2, 0],
[1, 6, 0, 3, 0]])
Run Code Online (Sandbox Code Playgroud)
注意:为了在 Python2 和 3 之间兼容,我们可能需要使用//-
A.data //= ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
796 次 |
| 最近记录: |