我有一个稀疏矩阵。我需要对这个矩阵逐行排序,并创建另一个[稀疏]矩阵。代码可能会更好地解释它:
# for `rand` function, you need newer version of scipy.
from scipy.sparse import *
m = rand(6,6, density=0.6)
d = m.getrow(0)
print d
输出1
(0, 5) 0.874881629788
(0, 4) 0.352559852239
(0, 2) 0.504791645463
(0, 1) 0.885898140175
我有这个m
矩阵。我想创建一个新的矩阵,其中包含排序后的m。新矩阵包含第0行,如下所示。
new_d = new_m.getrow(0)
print new_d
输出2
(0, 1) 0.885898140175
(0, 5) 0.874881629788
(0, 2) 0.504791645463
(0, 4) 0.352559852239
所以我可以得到哪个列更大等等:
print new_d.indices
输出3
array([1, 5, 2, 4])
当然,每一行都应该像上面那样独立排序。
我有一个解决这个问题的方法,但它并不优雅。
2条答案
按热度按时间frebpwbc1#
如果你愿意忽略矩阵中的零值元素,下面的代码应该可以工作。它也比使用getrow方法的实现快得多,后者相当慢。
例如:
根据你的需要,你可能想调整lambda中的排序键,或者进一步处理输出。如果你想把所有的东西都放在一个行索引字典中,你可以这样做:
pb3s4cty2#
我的坏解决方案是这样的:
上面可能有一些简单的错误,因为我还没有检查过。但是我想这个想法是直观的。有什么好的解决方案吗?
编辑
这个新的矩阵创建可能是无用的,因为如果你调用
getrow
方法,那么顺序又被打破了。只有coo_matrix.col
保持顺序。其他解决方案
这不是一个精确的解决方案,但它可能是有帮助的:
x一个一个一个一个x一个一个二个x