Python:余弦相似m*n矩阵
我有两个M X N矩阵,是我从图像中提取数据后构造的。这两个向量都有很长的第一行,第三行之后它们都成为第一列。 例如,原始向量如下所示Python:余弦相似m*n矩阵,python,vector,numpy,cosine-similarity,Python,Vector,Numpy,Cosine Similarity,我有两个M X N矩阵,是我从图像中提取数据后构造的。这两个向量都有很长的第一行,第三行之后它们都成为第一列。 例如,原始向量如下所示 1,23,2,5,6,2,2,6,2, 12,4,5,5, 1,2,4, 1, 2, 2 : 这两个向量有一个相似的模式,其中前三行有一个较长的行,然后随着进程逐渐变细。Do Do cosine similarity我正在考虑使用填充技术来添加零,并使这两个向量为nxn。我查看了关于cosine similarity的Python选项,但有些示例使用了一个名为
1,23,2,5,6,2,2,6,2,
12,4,5,5,
1,2,4,
1,
2,
2
:
这两个向量有一个相似的模式,其中前三行有一个较长的行,然后随着进程逐渐变细。Do Do cosine similarity我正在考虑使用填充技术来添加零,并使这两个向量为nxn。我查看了关于cosine similarity的Python选项,但有些示例使用了一个名为numpy的包。我想不出numpy到底是如何完成这种填充并实现余弦相似性的。任何指导都将不胜感激 为什么不能在两个锯齿状列表上运行嵌套循环(大概是这样),使用欧几里得/向量点积求和每一行,并使用结果作为相似性度量。这假设锯齿形尺寸相同
虽然我不太确定如何从位图图像中获得锯齿状数组(我当然会假设它是MxN形式的适当密集矩阵),或者上面的锯齿状数组是如何表示MxN矩阵/图像数据的,因此,用零填充数据有何意义?如果这是一种稀疏矩阵表示法,人们会期望用值注释行/列信息。为什么不能在两个锯齿列表上运行一个嵌套循环(假设),使用欧几里得/向量点积求和每一行,并将结果用作相似性度量。这假设锯齿形尺寸相同
虽然我不太确定如何从位图图像中获得锯齿状数组(我当然会假设它是MxN形式的适当密集矩阵),或者上面的锯齿状数组是如何表示MxN矩阵/图像数据的,因此,用零填充数据有何意义?如果这是一种稀疏矩阵表示法,则需要使用值注释行/列信息。如果两个数组的维数相同,我将使用NumPy将它们展平。NumPy(和SciPy)是一个强大的科学计算工具,使矩阵操作更容易 下面是我如何使用NumPy和SciPy的示例:
import numpy as np
from scipy.spatial import distance
A = np.array([[1,23,2,5,6,2,2,6,2],[12,4,5,5],[1,2,4],[1],[2],[2]], dtype=object )
B = np.array([[1,23,2,5,6,2,2,6,2],[12,4,5,5],[1,2,4],[1],[2],[2]], dtype=object )
Aflat = np.hstack(A)
Bflat = np.hstack(B)
dist = distance.cosine(Aflat, Bflat)
这里的结果是dist=1.10e-16
(即0)
请注意,我在这里使用了
dtype=object
,因为这是我知道的唯一能够在NumPy中将不同形状存储到数组中的方法。这就是为什么后来我使用hstack()
来展平数组(而不是使用更常见的flatte()
函数)。如果两个数组具有相同的维度,我将使用NumPy展平它们。NumPy(和SciPy)是一个强大的科学计算工具,使矩阵操作更容易
下面是我如何使用NumPy和SciPy的示例:
import numpy as np
from scipy.spatial import distance
A = np.array([[1,23,2,5,6,2,2,6,2],[12,4,5,5],[1,2,4],[1],[2],[2]], dtype=object )
B = np.array([[1,23,2,5,6,2,2,6,2],[12,4,5,5],[1,2,4],[1],[2],[2]], dtype=object )
Aflat = np.hstack(A)
Bflat = np.hstack(B)
dist = distance.cosine(Aflat, Bflat)
这里的结果是dist=1.10e-16
(即0)
请注意,我在这里使用了
dtype=object
,因为这是我知道的唯一能够在NumPy中将不同形状存储到数组中的方法。这就是为什么后来我使用hstack()
来展平数组(而不是使用更常见的flatte()
函数)。我将它们制作成一个scipy稀疏矩阵(),然后从scikit学习模块运行余弦相似性
from scipy import sparse
sparse_matrix= scipy.sparse.csr_matrix(your_np_array)
from sklearn.metrics import pairwise_distances
from scipy.spatial.distance import cosine
distance_matrix= pairwise_distances(sparse_matrix, metric="cosine")
我会将它们生成一个scipy稀疏矩阵(),然后从scikit学习模块运行余弦相似性
from scipy import sparse
sparse_matrix= scipy.sparse.csr_matrix(your_np_array)
from sklearn.metrics import pairwise_distances
from scipy.spatial.distance import cosine
distance_matrix= pairwise_distances(sparse_matrix, metric="cosine")
这是如何获得选票的。这是scipy提供的错误:
TypeError:scipy距离度量不支持稀疏矩阵。
我是否遗漏了什么?它对稀疏矩阵不起作用。我也犯了同样的错误。你能解决这个问题吗?使用sklearn.metrics.pairwise import cosine\u similarity中的来代替工作如何获得选票。这是scipy提供的错误:TypeError:scipy距离度量不支持稀疏矩阵。
我是否遗漏了什么?它对稀疏矩阵不起作用。我也犯了同样的错误。你能解决这个问题吗?改用sklearn.metrics.pairwise import cosine\u similarity中的