我有一个包含这样的数据集:
case,group,val1,val2,val3,val4
1,1,3,5,6,8
2,1,2,7,5,4
3,2,1,3,6,8
4,2,5,4,3,7
5,1,8,6,5,3
Run Code Online (Sandbox Code Playgroud)
我试图以编程方式计算组中值向量之间的欧几里德距离.
这意味着我在n个组中有x个案例.在成对的行之间计算欧氏距离,然后对该组进行平均.因此,在上面的例子中,首先我计算组1的平均值和标准差(情况1,2和5),然后标准化值(即[(原始值 - 平均值)/ st dev],然后计算案例之间的ED 1和案例2,案例2和5,以及案例1和5,最后平均该组的ED.
任何人都可以建议以一种合理有效的方式实现这一目标吗?
我有两个2D坐标点数组(x,y)
a = [ (x1,y1), (x2,y2), ... (xN,yN) ]
b = [ (X1,Y1), (X2,Y2), ... (XN,YN) ]
Run Code Online (Sandbox Code Playgroud)
我怎样才能找到每个对准对之间的欧氏距离(xi,yi) to (Xi,Yi)在1xN阵列?
该scipy.spatial.cdist函数给出了NxN数组中所有对之间的距离.
如果我只是使用norm函数逐个计算距离,它似乎很慢.
是否有内置功能来执行此操作?
我有由X和Y坐标对组成的大型数据框,并希望计算连续坐标之间的欧几里得距离(最小大小约为2000对坐标)。
因此,我想计算第1行到第2行,第2行到第3行,第3行到第4行等的距离。 这个问题很好地显示了如何计算轨迹数据的第一个点与最后一个点之间的欧几里得距离,但是我的数据是更接近:
dff <- structure(list(A = c(0L, 0L, 0L, 0L, 0L, 0L), T = 0:5, X = c(668L, 670L, 672L, 674L, 676L, 678L), Y = c(259L, 259L, 259L, 259L, 259L, 260L), V = c(NA, 0, 0, 0, 0, 0)), .Names = c("A", "T", "X", "Y", "V"), row.names = c(NA, 6L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
似乎应该有一种方法可以创建一个循环来执行此操作,但是我不确定如何对它进行下标。使用dist()这种大小的数据集在计算上要求很高,无论如何我也不确定如何提取与对角线不一的矩阵元素。
假设我有一个观点:
point <- c(1, 2)
如何从point低于某个选择值的位置生成欧几里德距离的10个点,例如3.换句话说:如何在我的点附近生成一组点?
我正在尝试在 Python 中执行一个简单的 Euclid 示例,但收到标题中提到的错误。代码如下:
def gcd1(a,b):
"""欧几里得算法"""
而一个:
a, b = b%a, a
返回 b
我按如下方式调用代码(我认为这可能与它有关):
对于 set1 中的 x:
打印(gcd1(x,set2[x]))
编辑:现状(作品)
set1 = 列表(范围(开始,结束))
""" otherrange() 的行为与 range() 一样,但返回一个固定列表"""
set2 = 列表(其他范围(开始,结束))
对于 set1 中的 x:
打印(gcd1(x,set2[x]))
我在大numpy数组中有许多不同的形式,我想使用numpy和计算它们之间的边到边欧几里德距离scipy。
Note: I did a search and this is different from previous other questions here on stack as I want to obtain the smallest distance between labeled patches within an array and not between points or seperate arrays as other questions have asked.
My current approach works using a KDTree, but is horribly inefficient for large arrays. Essentially I am looking up the coordinates of each labeled component and calculate the distance between …
numpy image-processing scipy euclidean-distance connected-components
我想根据2D平面上一组点之间的欧氏距离计算最小生成树.我当前的代码存储了所有边,然后执行Prim的算法以获得最小的生成树.但是,我知道这样做会O(n^2)占用所有边缘的空间.
在做了一些研究之后,如果我首先在这组点上计算delaunay三角剖分,然后通过在三角剖分的边缘上运行Prim或Kruskal算法来获得最小生成树,那么很明显可以优化内存和运行时.
这是编程竞赛的一部分(https://prologin.org/train/2017/qualification/taxi_des_neiges),所以我怀疑我能否使用scipy.spatial.有没有其他方法可以简单地获得Delaunay三角剖分中包含的边缘?
提前致谢.
我有一个 csv 文件,其中包含 2000 多个农场的坐标位置列表,结构如下;
FarmID | Latidue | Longitude |
------ |---------|-----------|
1 | y1 | x1 |
2 | y2 | x2 |
3 | y3 | x3 |
Run Code Online (Sandbox Code Playgroud)
....... 我想从这个数据中创建一个欧几里得距离矩阵,显示所有农场对之间的距离,所以我得到一个结果矩阵,如:
1 | 2 | 3 |
-----------|---------|-----------|
1 0 | 2.236 | 3.162 |
2 2.236 | 0 | 2.236 |
3 3.162 | 2.236 | 0 |
Run Code Online (Sandbox Code Playgroud)
有了更多的农场和数据框中的坐标,我需要能够以某种方式迭代所有农场对并创建一个像上面那样的距离矩阵。任何有关如何在 R 中执行此操作的帮助将不胜感激。谢谢!
以下有效和矢量化的Matlab代码使用权重向量WTS(每个维度1个权重;所有点的相同权重)计算2组A点和B点之间的加权欧氏距离:
WTS = sqrt(WTS);
% modify A and B against weight values
A = WTS(ones(1,size(A,1)),:).*A;
B = WTS(ones(1,size(B,1)),:).*B;
% calculate distance
AA = sum(A.*A,2);
BB = sum(B.*B,2)';
D = sqrt(AA(:,ones(1,size(B,1))) + BB(ones(1,size(A,1)),:) - 2*A*B');
Run Code Online (Sandbox Code Playgroud)
(来源:https://github.com/nolanbconaway/pairdist/blob/master/pairdist.m)
我的问题是:是否有一个有效的矢量化形式(Matlab,R或Julia很好)用于类似的计算,区别在于WTS是一组与A大小相同的权重向量?换句话说,代替1个权重向量,我需要A中每个点的1个权重向量.
这个答案似乎做了我需要的,但它是在Python中,我不知道如何将其转换为Matlab/R/Julia:https://stackoverflow.com/a/19285289/834518
此外,不是在MATLAB中有效计算加权距离的重复,因为该问题涉及单个权重向量情况,并且我明确要求N个权向量情况.
编辑:示例应用:RBF网络和高斯混合模型,其中您(可以)为每个神经元/组件具有1个权重向量.解决问题的有效方法对于这些问题至关重要.
提取kmeans群集中节点与质心之间的距离的任何选项。
我已经在文本嵌入数据集上完成了Kmeans聚类,并且我想知道在每个聚类中哪些是远离质心的节点,因此我可以检查各个节点的功能是否有所不同。
提前致谢!
r ×5
python ×3
numpy ×2
scipy ×2
arrays ×1
coordinates ×1
delaunay ×1
excel ×1
julia ×1
k-means ×1
matlab ×1
python-3.x ×1
scikit-learn ×1
spss ×1
vba ×1