Python Scipy&x27;s csr_矩阵按值排序?
因此,scikit learn的DBSCAN采用稀疏矩阵,如果矩阵不是csr_矩阵格式,则将其转换为稀疏矩阵。我想在csr_矩阵中进行分析,但我得到以下警告: 效率警告:预计算的稀疏输入未按数据排序 如何创建数据排序csr_矩阵?如果我初始化已排序的矩阵数据,矩阵将自动对其进行索引排序:Python Scipy&x27;s csr_矩阵按值排序?,python,scikit-learn,scipy,sparse-matrix,Python,Scikit Learn,Scipy,Sparse Matrix,因此,scikit learn的DBSCAN采用稀疏矩阵,如果矩阵不是csr_矩阵格式,则将其转换为稀疏矩阵。我想在csr_矩阵中进行分析,但我得到以下警告: 效率警告:预计算的稀疏输入未按数据排序 如何创建数据排序csr_矩阵?如果我初始化已排序的矩阵数据,矩阵将自动对其进行索引排序: >>> from scipy.sparse import csr_matrix >>> x = csr_matrix(([1,2,3],[[3,2,1],[5,2,1]]))
>>> from scipy.sparse import csr_matrix
>>> x = csr_matrix(([1,2,3],[[3,2,1],[5,2,1]]))
>>> print(x)
(1, 1) 3
(2, 2) 2
(3, 5) 1
我知道csr矩阵有一个has\u sorted\u index
标志,但我不知道如何使用它。即使我将其设置为false,矩阵仍然按索引排序
编辑:我尝试了sorted_index
,但似乎没有任何改变。我不确定我的排序索引的概念是否正确?它应该按每行从低到高对数据进行排序吗
>>> from scipy.sparse import csr_matrix
>>> x = csr_matrix(([7,3,5,1,6,2], [[0,1,2,0,1,2],[0,0,0,1,1,1]]), shape=(3, 2))
>>> print(x)
(0, 0) 7
(0, 1) 1
(1, 0) 3
(1, 1) 6
(2, 0) 5
(2, 1) 2
>>> x.has_sorted_indices = False
>>> x.sort_indices()
>>> print(x)
(0, 0) 7
(0, 1) 1
(1, 0) 3
(1, 1) 6
(2, 0) 5
(2, 1) 2
我想要什么(这是否可能?)
基本上,我需要这个来返回True:
out_of_order = graph.data[:-1] > graph.data[1:]
line_change = np.unique(graph.indptr[1:-1] - 1)
line_change = line_change[line_change < out_of_order.shape[0]]
return (out_of_order.sum() == out_of_order[line_change].sum())
顺序错误=graph.data[:-1]>graph.data[1:]
行更改=np.unique(图indptr[1:-1]-1)
线条变化=线条变化[线条变化<无序。形状[0]]
return(out-of-order.sum()==out-of-order[行更改].sum())
我认为您需要了解更多关于这项按数据排序的要求。scipy.sparse
中没有任何东西可以为您做到这一点。我甚至不知道这是什么意思。排序的索引与非零值的列索引有关-在每行内排序。@hpaulj感谢您的响应。实际上,我研究了抛出错误消息的原因,这正是我所需要的——列索引需要在每行中进行排序(按值)。。。我怎样才能做到这一点呢?sort\u index
-@hpaulj我更新了关于我要找什么的问题。我可能完全误解了sort\u index
的作用。我希望按照元素的值对每行中的元素进行排序。这是可行的还是我完全没有抓住要点?谢谢该方法称为sort\u index
而不是sort
或sort\u data
!我认为您需要了解更多关于这项按数据排序的要求。scipy.sparse
中没有任何东西可以为您做到这一点。我甚至不知道这是什么意思。排序的索引与非零值的列索引有关-在每行内排序。@hpaulj感谢您的响应。实际上,我研究了抛出错误消息的原因,这正是我所需要的——列索引需要在每行中进行排序(按值)。。。我怎样才能做到这一点呢?sort\u index
-@hpaulj我更新了关于我要找什么的问题。我可能完全误解了sort\u index
的作用。我希望按照元素的值对每行中的元素进行排序。这是可行的还是我完全没有抓住要点?谢谢该方法称为sort\u index
而不是sort
或sort\u data
!
out_of_order = graph.data[:-1] > graph.data[1:]
line_change = np.unique(graph.indptr[1:-1] - 1)
line_change = line_change[line_change < out_of_order.shape[0]]
return (out_of_order.sum() == out_of_order[line_change].sum())