Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 高维属性数组的相似性分数_Python_Multidimensional Array_Machine Learning_Cosine Similarity - Fatal编程技术网

Python 高维属性数组的相似性分数

Python 高维属性数组的相似性分数,python,multidimensional-array,machine-learning,cosine-similarity,Python,Multidimensional Array,Machine Learning,Cosine Similarity,大家好[第一篇帖子,请温柔:)] 我试图计算许多阵列(数千)之间的相似性分数,以便创建类似阵列的二维图(类似于tSNE) 阵列如下所示: 每个数组都有许多与其关联的唯一整数(每个对象可能有40-200个整数): 每个唯一整数的范围为~1-30000000。我想将每个数组与所有其他数组进行比较,以确定它们共有多少个整数。这应该是相似性分数的基础,我想比较会产生一个N x N的相似性分数矩阵,尽管我很想知道如何将N x N矩阵降低到较低的维度 谢谢你的帮助,我真的不知道从哪里开始 如果内存不是问题,

大家好[第一篇帖子,请温柔:)]

我试图计算许多阵列(数千)之间的相似性分数,以便创建类似阵列的二维图(类似于
tSNE

阵列如下所示: 每个数组都有许多与其关联的唯一整数(每个对象可能有40-200个整数):

每个唯一整数的范围为~1-30000000。我想将每个数组与所有其他数组进行比较,以确定它们共有多少个整数。这应该是相似性分数的基础,我想比较会产生一个N x N的相似性分数矩阵,尽管我很想知道如何将N x N矩阵降低到较低的维度


谢谢你的帮助,我真的不知道从哪里开始

如果内存不是问题,我会将所有数组转换为集合,然后比较它们的哈希值,例如:

arr1 = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101]
arr2 = [47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149]

arr1_arr2_same = set(arr1) & set(arr2)

print("arr1 vs arr2, same elements: {}\n\tTotal: {}".format(arr1_arr2_same, len(arr1_arr2_same)))

# prints:
# arr1 vs arr2, same elements: set([97, 67, 101, 71, 73, 79, 59, 83, 53, 89, 47, 61])
#    Total: 12

您可以在阵列上循环,收集这些集合并将它们(或它们的总数)存储在所需的矩阵中。不确定您到底想对它们做什么,tho.

如果内存不是问题,我会将所有数组转换为集合,然后比较它们的哈希值,例如:

arr1 = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101]
arr2 = [47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149]

arr1_arr2_same = set(arr1) & set(arr2)

print("arr1 vs arr2, same elements: {}\n\tTotal: {}".format(arr1_arr2_same, len(arr1_arr2_same)))

# prints:
# arr1 vs arr2, same elements: set([97, 67, 101, 71, 73, 79, 59, 83, 53, 89, 47, 61])
#    Total: 12

您可以在阵列上循环,收集这些集合并将它们(或它们的总数)存储在所需的矩阵中。不确定你到底想用它们做什么,tho。

对数组进行排序还可以更便宜地(二进制)搜索匹配元素;如果数组很大且匹配元素的数量很小,则可能值得一试。对数组进行排序还允许对匹配元素进行更便宜的(二进制)搜索;如果数组很大,匹配元素的数量很小,这可能是值得的。谢谢你,这绝对是有帮助的。我想知道如果内存开销是个问题,你会怎么做?此外,我还计划采用这些相似性分数(你列出的示例为12),并用类似tSNE的东西绘制它们,以可视化相似性网络。感谢这一点,这绝对是有帮助的。我想知道如果内存开销是个问题,你会怎么做?此外,我还计划获取这些相似性分数(例如,你列出的示例为12),并用类似tSNE的东西绘制它们,以可视化相似性网络。