我正在使用编程集体智慧的以下代码,这是一本计算两位电影评论家之间的eclidian距离的书中的函数.
此函数对字典中排名的差异求和,但n维中的欧几里德距离还包括该和的平方根.
AFAIK,因为我们使用相同的功能对每个人进行排名无关紧要我们是否平分根,但我想知道是否有特定原因?
from math import sqrt
# Returns a distance-based similarity score for person1 and person2
def sim_distance(prefs,person1,person2):
# Get the list of shared_items
si={}
for item in prefs[person1]:
if item in prefs[person2]:
si[item]=1
# if they have no ratings in common, return 0
if len(si)==0: return 0
# Add up the squares of all the differences
sum_of_squares=sum([pow(prefs[person1][item]-prefs[person2][item],2)
for item in prefs[person1] if item in prefs[person2]])
return 1/(1+sum_of_squares)
Run Code Online (Sandbox Code Playgroud) 似乎答案应该很简单,但我很难过.我有一个Nx3矩阵矩阵,其中第1和第3列是第n项的XY和Z坐标.我想计算从原点到物品的距离.在非矢量化形式中,这很容易.
距离= norm([xyz]);
要么
距离= sqrt(x ^ 2 + y ^ 2 + z ^ 2);
但是,在矢量化形式中它并非如此简单.当你传递一个矩阵来规范时,它不再返回欧几里德长度.
距离=范数(矩阵); %不起作用
和
distance = sqrt(x(:,1).*x(:,1)+ y(:,2).*y(:,2)+ z(:,3).*z(:,3)); %只是看起来很乱
有一个更好的方法吗?
我有一个距离矩阵:
> mat
hydrogen helium lithium beryllium boron
hydrogen 0.000000 2.065564 3.940308 2.647510 2.671674
helium 2.065564 0.000000 2.365661 1.697749 1.319400
lithium 3.940308 2.365661 0.000000 3.188148 2.411567
beryllium 2.647510 1.697749 3.188148 0.000000 2.499369
boron 2.671674 1.319400 2.411567 2.499369 0.000000
Run Code Online (Sandbox Code Playgroud)
和一个数据框:
> results
El1 El2 Score
Helium Hydrogen 92
Boron Helium 61
Boron Lithium 88
Run Code Online (Sandbox Code Playgroud)
我想计算results$El1和中单词之间的所有成对距离results$El2获得以下内容:
> results
El1 El2 Score Dist
Helium Hydrogen 92 2.065564
Boron Helium 61 1.319400
Boron Lithium 88 2.411567
Run Code Online (Sandbox Code Playgroud)
我用for循环做了这个,但看起来真的很笨重.是否有更优雅的方式来搜索和提取更少的代码行?
这是我目前的代码:
names = …Run Code Online (Sandbox Code Playgroud) 我正在开发一个只有整数运算的平台.应用程序使用地理信息,我用(x,y)坐标表示点,其中x和y是以米为单位测量的距离.作为近似,我想计算两点之间的欧几里德距离.但要做到这一点,我必须平方距离,并使用32位整数,我可以代表的最大距离是32公里.不好.我的需求更多的是1000公里.但我希望能够在小于30米的范围内解决距离问题.
因此我的问题是:我如何计算欧几里德距离,只使用整数运算,没有溢出,对于正方形不适合单个单词的距离?
ETA:我希望能够计算距离,但我可能会满足于能够比较它们.
鉴于包含以下信息的10亿条记录:
ID x1 x2 x3 ... x100
1 0.1 0.12 1.3 ... -2.00
2 -1 1.2 2 ... 3
...
Run Code Online (Sandbox Code Playgroud)
对于上面的每个ID,我想找到前10个最接近的ID,基于它们的向量的欧几里德距离(x1,x2,...,x100).
计算这个的最佳方法是什么?
nearest-neighbor euclidean-distance apache-spark pyspark spark-dataframe
我有一个数据帧
id lat long
1 12.654 15.50
2 14.364 25.51
3 17.636 32.53
5 12.334 25.84
9 32.224 15.74
Run Code Online (Sandbox Code Playgroud)
我想从保存在列表L1中的特定位置找到这些坐标的欧氏距离
L1 = [11.344,7.234]
Run Code Online (Sandbox Code Playgroud)
我想在df中创建一个新列,我有距离
id lat long distance
1 12.654 15.50
2 14.364 25.51
3 17.636 32.53
5 12.334 25.84
9 32.224 15.74
Run Code Online (Sandbox Code Playgroud)
我知道使用math.hypot()找到两点之间的欧氏距离:
dist = math.hypot(x2 - x1, y2 - y1)
Run Code Online (Sandbox Code Playgroud)
如何使用应用或迭代行来编写函数来给出距离.
我有两个熊猫dataframes d1和d2看起来像这些:
d1 好像:
output value1 value2 value2
1 100 103 87
1 201 97.5 88.9
1 144 54 85
Run Code Online (Sandbox Code Playgroud)
d2 好像:
output value1 value2 value2
0 100 103 87
0 201 97.5 88.9
0 144 54 85
0 100 103 87
0 201 97.5 88.9
0 144 54 85
Run Code Online (Sandbox Code Playgroud)
对于d1中的所有行,列输出的值为1,对于d2中的所有行,列的输出为0.这是一个分组变量.我需要找到d1和d2的每一行之间的欧氏距离(不在d1或d2内).如果d1有m行并且d2有n行,则距离矩阵将具有m行和n列
我在 python 的 scikit learn 中使用聚类模块,我想使用归一化欧几里德距离。这个(我知道的)没有内置距离。这是一个列表。
因此,我想使用可调用对象实现我自己的归一化欧几里得距离。该函数是我的distance模块的一部分,称为distance.normalized_euclidean_distance. 它采用三个输入: X,Y,和SD。
但是,归一化欧几里得距离需要总体样本的标准差。但是,scipy 中的成对距离只允许两个输入:X和Y。
我如何让它接受额外的论点?
我试着把它作为 a **kwarg,但这似乎不起作用:
cluster = DBSCAN(eps=1.0, min_samples=1,metric = distance.normalized_euclidean, SD = stdv)
Run Code Online (Sandbox Code Playgroud)
这里distance.normalized_euclidean是发生在两个数组,我写的功能,X以及Y并计算它们之间的归一化欧氏距离。
...但这会引发错误:
TypeError: __init__() got an unexpected keyword argument 'SD'
Run Code Online (Sandbox Code Playgroud)
使用附加关键字参数的方法是什么?
这里说Any further parameters are passed directly to the distance function.,这让我认为这是可以接受的。
python scipy euclidean-distance keyword-argument scikit-learn
我想从数据框创建一个带有加权欧几里得距离的距离矩阵。权重将在向量中定义。下面是一个例子:
library("cluster")
a <- c(1,2,3,4,5)
b <- c(5,4,3,2,1)
c <- c(5,4,1,2,3)
df <- data.frame(a,b,c)
weighting <- c(1, 2, 3)
dm <- as.matrix(daisy(df, metric = "euclidean", weights = weighting))
Run Code Online (Sandbox Code Playgroud)
我到处搜索,在 R 中找不到一个包或解决方案。“集群”包中的“雏菊”函数声称支持加权,但权重似乎没有被应用,它只是吐出来普通欧几里得。距离。
任何想法堆栈溢出?
我有两个桶(无序,1维数据结构)的数字,我想计算两个桶的任何元素之间的最小距离.有没有办法找到不同桶中任何数字之间的最短距离O(1)?什么是我最好的选择?
Input
[B1] 1, 5, 2, 347, 50
[B2] 21, 17, 345
Output
2 // abs(347 - 345)
Run Code Online (Sandbox Code Playgroud)
编辑
O(1)看看为什么我需要这个以及我在之前的问题版本中想到的内容.
python ×4
distance ×2
pandas ×2
r ×2
scipy ×2
algorithm ×1
apache-spark ×1
c++ ×1
dataframe ×1
intersection ×1
matlab ×1
norm ×1
pyspark ×1
r-daisy ×1
scikit-learn ×1