将 scipy.sparse.csr.csr_matrix 转换为列表列表
converting scipy.sparse.csr.csr_matrix to a list of lists
我正在学习多标签分类并尝试通过 scikit 学习实现 tfidf 教程。
我正在处理一个文本语料库来计算它的 tf-idf 分数。
我正在为 purpose.Using CountVectorizer 和 TfidfTransformer 使用模块 sklearn.feature_extraction.text 我现在有我的语料库矢量化和每个词汇的 tfidf。
问题是我现在有一个稀疏矩阵,比如:
(0, 47) 0.104275891915
(0, 383) 0.084129133023
.
.
.
.
(4, 308) 0.0285015996586
(4, 199) 0.0285015996586
我想将这个 sparse.csr.csr_matrix 转换成列表的列表,这样我就可以从上面 csr_matrix 中去掉文档 ID 并得到 tfidf 和 vocabularyId 对
47:0.104275891915 383:0.084129133023
.
.
.
.
308:0.0285015996586
199:0.0285015996586
有没有什么方法可以转换成列表的列表或我可以更改格式以获得 tfidf-vocabularyId 对的任何其他方法?
我不知道 tf-idf
期望什么,但我可以帮助解决稀疏问题。
制作一个稀疏矩阵:
In [526]: M=sparse.random(4,10,.1)
In [527]: M
Out[527]:
<4x10 sparse matrix of type '<class 'numpy.float64'>'
with 4 stored elements in COOrdinate format>
In [528]: print(M)
(3, 1) 0.281301619779
(2, 6) 0.830780358032
(1, 1) 0.242503399296
(2, 2) 0.190933579917
现在将其转换为 coo
格式。这已经是这样了(我本可以给 random
一个格式参数)。在任何情况下,coo
格式的值都存储在 3 个数组中:
In [529]: Mc=M.tocoo()
In [530]: Mc.data
Out[530]: array([ 0.28130162, 0.83078036, 0.2425034 , 0.19093358])
In [532]: Mc.row
Out[532]: array([3, 2, 1, 2], dtype=int32)
In [533]: Mc.col
Out[533]: array([1, 6, 1, 2], dtype=int32)
看起来你想忽略 Mc.row
,并以某种方式加入其他人。
例如字典:
In [534]: {k:v for k,v in zip(Mc.col, Mc.data)}
Out[534]: {1: 0.24250339929583264, 2: 0.19093357991697379, 6: 0.83078035803205375}
或二维数组中的列:
In [535]: np.column_stack((Mc.col, Mc.data))
Out[535]:
array([[ 1. , 0.28130162],
[ 6. , 0.83078036],
[ 1. , 0.2425034 ],
[ 2. , 0.19093358]])
(还有 np.array((Mc.col, Mc.data)).T
)
或仅作为数组列表 [Mc.col, Mc.data]
,或 [Mc.col.tolist(), Mc.data.tolist()]
列表列表等
你能从那里拿走吗?
基于Scipy我建议使用这个方法:
ndarray = yourMatrix.toarray()
listOflist = ndarray.tolist()
为此,正确使用 scipy 稀疏矩阵类型至关重要 scipy.sparse。在这种情况下 scipy.sparse.lil_matrix 它是理想的,其“数据”属性存储 np.array 表示列值的列表。
下面是一个简短的脚本
arrays_of_list = matriz.tolil().data
list_of_list = arrays_of_list.tolist()
我正在学习多标签分类并尝试通过 scikit 学习实现 tfidf 教程。 我正在处理一个文本语料库来计算它的 tf-idf 分数。 我正在为 purpose.Using CountVectorizer 和 TfidfTransformer 使用模块 sklearn.feature_extraction.text 我现在有我的语料库矢量化和每个词汇的 tfidf。 问题是我现在有一个稀疏矩阵,比如:
(0, 47) 0.104275891915
(0, 383) 0.084129133023
.
.
.
.
(4, 308) 0.0285015996586
(4, 199) 0.0285015996586
我想将这个 sparse.csr.csr_matrix 转换成列表的列表,这样我就可以从上面 csr_matrix 中去掉文档 ID 并得到 tfidf 和 vocabularyId 对
47:0.104275891915 383:0.084129133023
.
.
.
.
308:0.0285015996586
199:0.0285015996586
有没有什么方法可以转换成列表的列表或我可以更改格式以获得 tfidf-vocabularyId 对的任何其他方法?
我不知道 tf-idf
期望什么,但我可以帮助解决稀疏问题。
制作一个稀疏矩阵:
In [526]: M=sparse.random(4,10,.1)
In [527]: M
Out[527]:
<4x10 sparse matrix of type '<class 'numpy.float64'>'
with 4 stored elements in COOrdinate format>
In [528]: print(M)
(3, 1) 0.281301619779
(2, 6) 0.830780358032
(1, 1) 0.242503399296
(2, 2) 0.190933579917
现在将其转换为 coo
格式。这已经是这样了(我本可以给 random
一个格式参数)。在任何情况下,coo
格式的值都存储在 3 个数组中:
In [529]: Mc=M.tocoo()
In [530]: Mc.data
Out[530]: array([ 0.28130162, 0.83078036, 0.2425034 , 0.19093358])
In [532]: Mc.row
Out[532]: array([3, 2, 1, 2], dtype=int32)
In [533]: Mc.col
Out[533]: array([1, 6, 1, 2], dtype=int32)
看起来你想忽略 Mc.row
,并以某种方式加入其他人。
例如字典:
In [534]: {k:v for k,v in zip(Mc.col, Mc.data)}
Out[534]: {1: 0.24250339929583264, 2: 0.19093357991697379, 6: 0.83078035803205375}
或二维数组中的列:
In [535]: np.column_stack((Mc.col, Mc.data))
Out[535]:
array([[ 1. , 0.28130162],
[ 6. , 0.83078036],
[ 1. , 0.2425034 ],
[ 2. , 0.19093358]])
(还有 np.array((Mc.col, Mc.data)).T
)
或仅作为数组列表 [Mc.col, Mc.data]
,或 [Mc.col.tolist(), Mc.data.tolist()]
列表列表等
你能从那里拿走吗?
基于Scipy我建议使用这个方法:
ndarray = yourMatrix.toarray()
listOflist = ndarray.tolist()
为此,正确使用 scipy 稀疏矩阵类型至关重要 scipy.sparse。在这种情况下 scipy.sparse.lil_matrix 它是理想的,其“数据”属性存储 np.array 表示列值的列表。 下面是一个简短的脚本
arrays_of_list = matriz.tolil().data
list_of_list = arrays_of_list.tolist()