scipy 如何用numpy索引技巧而不是循环来分配这个稀疏矩阵?

s8vozzvw  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(140)

我已经

  • M:形状为p*n的浮点稀疏矩阵(scipy中的csr_matrix),其中p和n各自约为1百万。
  • M ′:另一个浮点稀疏矩阵,其形状为p ′ * n ′,其中p ′〉p,且n ′〉n。
  • IndexP:索引的向量,形状为1*p,具有p个不大于p的唯一无符号整数'
  • IndexN:索引的向量,形状为1*n,具有n个不大于n的唯一无符号整数

如何将下面的循环转换为快速稀疏矩阵数组运算

for all i in range(n) and j in range (p) such that M[i,j]!=0:
   M'[IndexP[i], IndexN[j]]= M[i,j]

示例:
假设

  • M是

[ [0个2] [3个0] ]

  • 索引P为[9,100]
  • 索引N为[50,30]
  • M“是稀疏矩阵,使得M'.shape=(200,200)

然后上面的循环将赋值M'[9,30]=2, M'[100, 50]=3(并且M'在其他地方为0)。

3duebb1j

3duebb1j1#

M = np.array([ [0, 2], [3, 0] ])
IndexP = np.array([9,100])
IndexN = np.array([50,30])
idxn, idxp = np.where(M)
M2 =np.zeros((200,200))
M2[IndexP[idxp], IndexN[idxn]] = M[idxp, idxn]

相关问题