问题很简单:假设我有一个来自scipy稀疏矩阵M(100,000X500,000)的给定行r,我想在M矩阵中找到它的位置/索引?我怎样才能以有效的方式实现这一目标?
目前我正在尝试以下方式,但速度非常慢。
offset = 500
begin = 0
end = begin + offset
row = row.todense() #convert sparse to dense
while 1:
sub_M = M[begin:end,:].todense() #M matrix is too big that its dense cannot fit memory
labels=np.all(row == sub_M, axis=1) # here we find row in the sub set of M, but in a dense representation
begin = end
end = end + offset
if (end - offset) == M.shape[0]:
break
elif end > M.shape[0]:
end = M.shape[0]
答案 0 :(得分:1)
除非您想深入了解一个或多个稀疏矩阵类型的内部,否则您应该为您的矩阵使用CSR格式:
sum(multiply(M, M), 2)
M*r
(其中r被视为列向量)如果M*r
的条目与相应行的长度匹配,则表示您匹配。
请注意ord
的默认numpy.linalg.norm
是L2规范。
答案 1 :(得分:0)
最后,我提出了一个非常简单但时间效率很高的解决方案。稀疏矩阵中的每一行都转换为字符串,并与其索引/位置一起放入字典中。然后需要找到的行是字典的关键字,而dic [str(row)]给出了它的索引。