繁体   English   中英

将值添加到稀疏矩阵中的非零元素

[英]Adding values to non zero elements in a Sparse Matrix

我有一个稀疏矩阵,我想在其中将非零元素的所有值加一。 但是,我无法弄清楚。 有没有办法在python中使用标准包来做到这一点? 任何帮助将不胜感激。

我不能评论它的性能,但你可以做(​​Scipy 1.1.0);

>>> from scipy.sparse import csr_matrix
>>> a = csr_matrix([[0, 2, 0], [1, 0, 0]])
>>> print(a)
(0, 1)        2
(1, 0)        1
>>> a[a.nonzero()] = a[a.nonzero()] + 1
>>> print(a)
(0, 1)        3
(1, 0)        2

如果您的矩阵有 2 个维度,您可以执行以下操作:

sparse_matrix = [[element if element==0 else element+1 for element in row ]for row in sparse_matrix]

它将迭代矩阵的每个元素,如果元素等于 0,则返回该元素而不做任何更改,否则它将向该元素添加 1 并返回它。

这个问题的答案中更多地了解列表理解中条件。

您可以使用numpy包,它具有处理 n 维数组的高效功能。 你需要的是:

array[array>0] += 1

其中array是矩阵的 numpy 数组。 这里的例子:`

import numpy as np
my_matrix = [[2,0,0,0,7],[0,0,0,4,0]]
array = np.array(my_matrix);
print("Matrix before incrementing values: \n", array)
array[array>0] += 1
print("Matrix after incrementing values: \n", array)`

输出:

Matrix before incrementing values: 
 [[2 0 0 0 7]
 [0 0 0 4 0]]
Matrix after incrementing values: 
 [[3 0 0 0 8]
 [0 0 0 5 0]]

希望这可以帮助!

当你有一个scipy稀疏矩阵( scipy.sparse )是:

import scipy.sparse as sp
my_matrix = [[2,0,0,0,7],[0,0,0,4,0]]
my_matrix = sp.csc_matrix(my_matrix)
my_matrix.data += 1
my_matrix.todense()

返回:

[[3, 0, 0, 0, 8], [0, 0, 0, 5, 0]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM