1

I have two M X N matrices which I construct after extracting data from images. Both the vectors have lengthy first row and after the 3rd row they all become only first column. for example raw vector looks like this

1,23,2,5,6,2,2,6,2,
12,4,5,5,
1,2,4,
1,
2,
2
:

Both vectors have a similar pattern where first three rows have lengthy row and then thin out as it progress. Do do cosine similarity I was thinking to use a padding technique to add zeros and make these two vectors N X N. I looked at Python options of cosine similarity but some examples were using a package call numpy. I couldn't figure out how exactly numpy can do this type of padding and carry out a cosine similarity. Any guidance would be greatly appreciated.

4

3 回答 3

5

如果两个数组具有相同的维度,我会使用 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()为了展平数组(而不是使用更常见的flatten()功能)。

于 2012-07-10T13:23:21.787 回答
3

我会将它们制成一个 scipy 稀疏矩阵(http://docs.scipy.org/doc/scipy/reference/sparse.html),然后从 scikit learn 模块运行余弦相似度。

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")
于 2013-06-10T21:52:05.377 回答
0

为什么你不能只在两个锯齿状列表上运行一个嵌套循环(大概),使用欧几里得/向量点积对每一行求和,并将结果用作相似性度量。这假设锯齿状尺寸是相同的。

虽然我不太确定如何从位图图像中获取锯齿状数组(我假设它是 MxN 形式的适当密集矩阵)或者上面的锯齿状数组数组如何表示 MxN 矩阵/图像数据,因此,用零填充数据如何有意义?如果这是一种稀疏矩阵表示,人们会期望使用值注释的行/列信息。

于 2012-07-10T06:46:51.223 回答