【问题标题】:referencing rows in a matrix using index from another matrix使用来自另一个矩阵的索引引用矩阵中的行
【发布时间】:2012-09-01 06:44:38
【问题描述】:

你有一个原始的稀疏矩阵 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 添加索引列),但没有其他限制。

【问题讨论】:

    标签: numpy scipy


    【解决方案1】:

    如果您在数组i 中有原始索引,并且i 中的值按递增顺序排列(如您的示例中所示),则可以使用 numpy.searchsorted(i, [0, 3]) 来在 Z 中找到与原始 X 中的索引 [0, 3] 对应的索引。这是 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]])

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 2013-01-20
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 2016-03-15
      相关资源
      最近更新 更多