Python 如何计算scipy.sparse.csr.csr_矩阵列表的余弦相似性
我有一个稀疏向量列表:Python 如何计算scipy.sparse.csr.csr_矩阵列表的余弦相似性,python,numpy,scipy,scikit-learn,cosine-similarity,Python,Numpy,Scipy,Scikit Learn,Cosine Similarity,我有一个稀疏向量列表: print(type(downsample_matrix)) # Display <class 'list'> print(type(downsample_matrix[0])) # Display <class 'scipy.sparse.csr.csr_matrix'> 当我的列表由nd.array组成时,我没有问题: print(type(downsample_matrix)) # Display <class 'list'>
print(type(downsample_matrix)) # Display <class 'list'>
print(type(downsample_matrix[0])) # Display <class 'scipy.sparse.csr.csr_matrix'>
当我的列表由nd.array
组成时,我没有问题:
print(type(downsample_matrix)) # Display <class 'list'>
print(type(downsample_matrix[0])) # Display <class 'numpy.ndarray'>
打印(类型(下采样矩阵))#显示
打印(类型(下采样矩阵[0]))#显示
如何在Space向量列表上应用余弦相似性?试试这个
from sklearn.metrics.pairwise import cosine_similarity
from scipy import sparse
import numpy as np
A = np.array([[0, 1, 2, 0, 0], [0, 0, 1, 1, 2],[0, 1, 0, 1, 0]])
A_sparse = sparse.csr_matrix(A)
similarities = cosine_similarity(A_sparse)
print('pairwise dense output:\n {}\n'.format(similarities))
结果
pairwise dense output:
[[ 1. 0.36514837 0.31622777]
[ 0.36514837 1. 0.28867513]
[ 0.31622777 0.28867513 1. ]]
我的孩子
print (scipy.__version__)
0.19.0
试试这个
from sklearn.metrics.pairwise import cosine_similarity
from scipy import sparse
import numpy as np
A = np.array([[0, 1, 2, 0, 0], [0, 0, 1, 1, 2],[0, 1, 0, 1, 0]])
A_sparse = sparse.csr_matrix(A)
similarities = cosine_similarity(A_sparse)
print('pairwise dense output:\n {}\n'.format(similarities))
结果
pairwise dense output:
[[ 1. 0.36514837 0.31622777]
[ 0.36514837 1. 0.28867513]
[ 0.31622777 0.28867513 1. ]]
我的孩子
print (scipy.__version__)
0.19.0
创建一个小的稀疏矩阵。请注意,它不是
ndarray
的子类。它将数据存储在3个数组中-数据和索引:
In [196]: M = sparse.csr_matrix([[0,1,0],[1,0,1]])
In [197]: M
Out[197]:
<2x3 sparse matrix of type '<class 'numpy.int32'>'
with 3 stored elements in Compressed Sparse Row format>
In [198]: M.data
Out[198]: array([1, 1, 1], dtype=int32)
In [199]: M.indices
Out[199]: array([1, 0, 2], dtype=int32)
In [200]: M.indptr
Out[200]: array([0, 1, 3], dtype=int32)
它无法将列表转换为数字数组
但如果是密集阵列列表,我会得到一个3d阵列:
In [204]: np.array([M.A,M.A,M.A],dtype=int)
Out[204]:
array([[[0, 1, 0],
[1, 0, 1]],
[[0, 1, 0],
[1, 0, 1]],
[[0, 1, 0],
[1, 0, 1]]])
In [205]: _.shape
Out[205]: (3, 2, 3)
我还可以将稀疏矩阵与稀疏版本的vstack
或hstack
连接起来
In [206]: sparse.vstack(alist)
Out[206]:
<6x3 sparse matrix of type '<class 'numpy.int32'>'
with 9 stored elements in Compressed Sparse Row format>
In [207]: _.A
Out[207]:
array([[0, 1, 0],
[1, 0, 1],
[0, 1, 0],
[1, 0, 1],
[0, 1, 0],
[1, 0, 1]], dtype=int32)
创建一个小的稀疏矩阵。请注意,它不是
ndarray
的子类。它将数据存储在3个数组中-数据和索引:
In [196]: M = sparse.csr_matrix([[0,1,0],[1,0,1]])
In [197]: M
Out[197]:
<2x3 sparse matrix of type '<class 'numpy.int32'>'
with 3 stored elements in Compressed Sparse Row format>
In [198]: M.data
Out[198]: array([1, 1, 1], dtype=int32)
In [199]: M.indices
Out[199]: array([1, 0, 2], dtype=int32)
In [200]: M.indptr
Out[200]: array([0, 1, 3], dtype=int32)
它无法将列表转换为数字数组
但如果是密集阵列列表,我会得到一个3d阵列:
In [204]: np.array([M.A,M.A,M.A],dtype=int)
Out[204]:
array([[[0, 1, 0],
[1, 0, 1]],
[[0, 1, 0],
[1, 0, 1]],
[[0, 1, 0],
[1, 0, 1]]])
In [205]: _.shape
Out[205]: (3, 2, 3)
我还可以将稀疏矩阵与稀疏版本的vstack
或hstack
连接起来
In [206]: sparse.vstack(alist)
Out[206]:
<6x3 sparse matrix of type '<class 'numpy.int32'>'
with 9 stored elements in Compressed Sparse Row format>
In [207]: _.A
Out[207]:
array([[0, 1, 0],
[1, 0, 1],
[0, 1, 0],
[1, 0, 1],
[0, 1, 0],
[1, 0, 1]], dtype=int32)
我的用例不同,如果所有稀疏向量都具有相同的维度(即位于相同的特征空间),我的矩阵A将充满稀疏向量@mel,首先将此列表转换为稀疏矩阵,然后按照建议使用sklearn的
cosine\u similarity
函数。我的用例不同,我的矩阵A将充满稀疏向量@mel,如果所有稀疏向量具有相同的维度(即生活在相同的特征空间中),请首先将此列表转换为稀疏矩阵,然后按照建议使用sklearn的cosine\u similarity
函数。np.array(array,…)
尝试将输入列表转换为一个数组。使用一个匹配的numpy数组列表进行测试。它不适用于稀疏矩阵。测试你的self.sparse.hstack
或sparse.vstack
是否可以将矩阵合并为一个。np.array(array,…)
尝试将输入列表转换为一个数组。使用一个匹配的numpy数组列表进行测试。它不适用于稀疏矩阵。测试你的self.sparse.hstack
或sparse.vstack
是否可以将矩阵组合成一个矩阵。