1

你有一个原始的稀疏矩阵 X:

>>print type(X) 
>>print X.todense()
<class 'scipy.sparse.csr.csr_matrix'>
[[1,4,3]
 [3,4,1]
 [2,1,1]
 [3,6,3]]

你有第二个稀疏矩阵 Z,它是从 X 的某些行派生的(比如说值加倍,所以我们可以看到两个矩阵之间的差异)。在pseudo-code

>>Z = X[[0,2,3]]
>>print Z.todense()
[[1,4,3]
 [2,1,1]
 [3,6,3]]

>>Z = Z*2
>>print Z.todense()
[[2, 8, 6]
 [4, 2, 2]
 [6, 12,6]]

使用 X 中的 ORIGINAL 索引检索 Z 中的行的最佳方法是什么。例如,在伪代码中:

>>print Z[[0,3]]
[[2,8,6]              #0 from Z, and what would be row **0** from X)
 [6,12,6]]            #2 from Z, but what would be row **3** from X)

也就是说,如何使用引用原始矩阵 X 中原始行位置的索引从 Z 中检索行?为此,无论如何都不能修改 X(不能向矩阵 X 添加索引列),但没有其他限制。

4

1 回答 1

1

如果您在数组中有原始索引i,并且其中的值按升序i排列(如您的示例中所示),则可以使用 numpy.searchsorted(i, [0, 3]) 查找 Z 中与索引对应的索引[0, 3] 在原始 X 中。这是 IPython 会话中的演示:

在 [39] 中:X = csr_matrix([[1,4,3],[3,4,1],[2,1,1],[3,6,3]])

在 [40] 中:X.todense()
出[40]:
矩阵([[1, 4, 3],
        [3, 4, 1],
        [2, 1, 1],
        [3, 6, 3]])

在 [41] 中: i = 数组([0, 2, 3])

在 [42] 中:Z = 2 * X[i]

在 [43] 中:Z.todense()
出[43]:
矩阵([[ 2, 8, 6],
        [ 4, 2, 2],
        [ 6, 12, 6]])

在 [44] 中:Zsub = Z[searchsorted(i, [0, 3])]

在 [45] 中:Zsub.todense()
出[45]:
矩阵([[ 2, 8, 6],
        [ 6, 12, 6]])

于 2012-09-07T11:56:12.877 回答