如何计算大型数据帧的欧几里德距离(并仅保存摘要)

2023-12-06

我编写了一个简短的“for”循环来查找数据帧中每一行与所有其他行之间的最小欧几里德距离(并记录哪一行最接近)。理论上,这可以避免与尝试计算非常大的矩阵的距离度量相关的错误。然而,虽然内存中保存的内容不多,但对于大型矩阵来说速度非常慢(我的约 150K 行的用例仍在运行)。

我想知道是否有人可以在使用 apply 或类似功能矢量化我的函数方面为我提供建议或指出正确的方向。对于看似简单的问题表示歉意,但我仍在努力以矢量化的方式思考。

预先感谢(以及您的耐心)。

require(proxy)

df<-data.frame(matrix(runif(10*10),nrow=10,ncol=10), row.names=paste("site",seq(1:10)))

min.dist<-function(df) {  
 #df for results
 all.min.dist<-data.frame()
 #set up for loop 
 for(k in 1:nrow(df)) {
     #calcuate dissimilarity between each row and all other rows
     df.dist<-dist(df[k,],df[-k,])
     # find minimum distance
     min.dist<-min(df.dist)
     # get rowname for minimum distance (id of nearest point)
     closest.row<-row.names(df)[-k][which.min(df.dist)]
     #combine outputs
     all.min.dist<-rbind(all.min.dist,data.frame(orig_row=row.names(df)[k],
     dist=min.dist, closest_row=closest.row))
    }
 #return results
 return(all.min.dist)
                        } 
 #example
 min.dist(df)

这应该是一个好的开始。它使用快速矩阵运算并避免不断增长的对象构造,这两者都在评论中建议。

min.dist <- function(df) {

  which.closest <- function(k, df) {
    d <- colSums((df[, -k] - df[, k]) ^ 2)
    m <- which.min(d)
    data.frame(orig_row    = row.names(df)[k],
               dist        = sqrt(d[m]),
               closest_row = row.names(df)[-k][m])
  }

  do.call(rbind, lapply(1:nrow(df), which.closest, t(as.matrix(df))))
}

如果这仍然太慢,作为建议的改进,您可以计算距离k一次指向一个点而不是单个点。的大小k需要在速度和内存使用之间进行折衷。

Edit:另请阅读https://stackoverflow.com/a/16670220/1201032

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何计算大型数据帧的欧几里德距离(并仅保存摘要) 的相关文章

随机推荐

  • 从内存中运行可执行文件

    我正在尝试直接从该可执行文件的 byte 表示形式作为 C 中的资源运行该可执行文件 所以基本上我想直接运行PE的一个字节 而不接触硬盘 我为此使用的代码曾经有效 但现在不再有效 该代码创建一个具有冻结主线程的进程 更改整个进程数据 最后恢
  • 设置文本视图+编辑文本+按钮

    我想在同一行中放置一个 TextView Edittext 和一个按钮 但我遇到的问题是该按钮未正确向左对齐 并且在小屏幕中 edittext 被整个填充 Small screen Big Screen 我的编码如下
  • 另一个 JNI、C++、DLL、UnsatisfiedLinkError

    我已经找了两天了 没有任何解决方案可以帮助我 所以我们再次开始 如何修复 JNI 中的 UnsatisfiedLinkError 这是我的java代码 package org lingenio util import java util p
  • typescript 静态类型检查 ES 模块导出

    是一种静态类型检查 es 模块导出的方法吗 作为code描述如下 file ts export const x 4 export const y whatever export const foo gt 2 the interface de
  • 用于操作的 MVC [HttpPost/HttpGet]

    我正在使用 MVC C 有人可以举例说明为什么要使用 HttpPost HttpGet 对于一个动作 一个活性物如何能两者兼得 实际用途是什么 假设你有一个Login为用户提供登录屏幕的操作 然后在用户提交表单后接收回用户名和密码 publ
  • Hyperledger Fabric 1.4:如何测试和验证 Fabric Node SDK 中的 registerChaincodeEvent 函数?

    我目前在添加资产时从我的链代码发出一个事件 async addRequestNode ctx sampleAssetId sampleData console info Adding Sample Asset await ctx stub
  • 静态变量与单例变量

    我正在制作 Java REST 应用程序 我想知道我应该如何实现我的服务 我应该为整个应用程序使用静态服务变量还是像 Spring MVC 中那样将服务作为单例 单例对象和在应用过程中只初始化一次对象有什么区别吗 如果您想要一些实用方法或常
  • blazor 托管模板项目在发布应用程序后不起作用

    我从 dotnet CLI 创建一个新的 blazor 托管项目 名为 foo dotnet new blazorwasm hosted 我运行应用程序 dotnet run c Release 请求 https localhost 500
  • 当焦点文本输入反应本机时,滚动视图无法滚动

    我在 ScrollView 中有一个 TextInput 当 TextInput 获得焦点时 滚动不起作用 此问题仅影响 Android setting
  • 使用多个 MergedDictionaries 时,为什么样式在 wpf 运行时不起作用?

    如果我多次使用 MergedDictionaries 来定义样式 它在运行时不起作用 但在 VS2010 的 WPF 设计器中它可以起作用 如果在运行时使用代码加载 MergedDictionaries 它也可以工作 为什么会发生这种情况
  • 在 Windows 上构建 Xcode 项目

    我需要在 Windows 上编译 Xcode 项目 我不需要制作一个 因为它是自动生成的 我是 iOS 开发新手 我不打算提交到 App Store 或支付 Apple 100 美元来签名 我只是想构建一个可以安装在我的越狱设备上的 IPA
  • 当用户移动地图时捕获bounds_changed事件,但不捕获setCenter方法

    我想在用户移动地图 更改缩放时监听 bounds changed 事件 但我不希望当我的程序调用 setCenter 或 setZoom 方法时触发它 所以我尝试在设置中心之前删除事件 然后再次添加它 但是 这没有用 我的活动仍在被解雇 v
  • VS 2010:状态栏上的++文件符号是什么?

    我正在尝试在我的 Win 7 Pro 开发盒上的 XP 虚拟机中运行 VS 2010 它基本上可以工作 但是当在这种环境中实际编辑代码时 我的编辑能力会不断停止并在很长一段时间内断断续续 例如 每 50 秒的运行环境就会暂停 20 秒 这台
  • 如何使用 JQuery 重定向,加载另一个页面但在请求中发送一些 POST 参数?

    如何使用 JQuery DOJO 或纯 JavaScript 进行重定向 加载另一个页面但在请求中发送一些 POST 参数 这应该有效 但我还没有测试过 function postData url data var form
  • 什么是C本地函数声明机制?

    gcc 中似乎允许本地函数声明 我发现了对此的讨论 局部函数声明有什么用处吗 但是 我的问题是 ISO C 标准允许吗 如果是的话 如何解释以下令人费解的现象 int main void int f void f void g void g
  • Hashtable 中最大值的键

    嗨我有以下对象 Hashtable
  • Java应用程序使用系统中的最大可用内存

    有 Xmx 和 max heap size jnlp 选项来设置 java 应用程序可以使用的最大内存 如果未指定这些选项 则仅允许应用程序使用系统中少量的可用物理内存 这就是人们使用 Xmx 来允许应用程序使用更多内存的原因 但这对我来说
  • 如何在 Windows 批处理文件中回显 >>someText

    我想将确切的文本 gt gt someText 打印到控制台 I try echo abb gt gt cdd eee 但这不会打印任何内容并创建文件cdd里面有 abb 文本 我应该使用什么语法echo为了那个原因 你必须 转义 特殊字符
  • ELB 使用带有自签名证书的 HTTPS 到后端服务器

    我希望设置一个使用 HTTPS 与后端服务器通信的 ELB 我正在尝试使用单个后端服务器设置概念验证 但似乎无法让 ELB 与服务器通信 我几乎可以肯定这是一个证书问题 因为任何没有 SSL 的设置都可以完美运行 我该如何设置 我尝试了多个
  • 如何计算大型数据帧的欧几里德距离(并仅保存摘要)

    我编写了一个简短的 for 循环来查找数据帧中每一行与所有其他行之间的最小欧几里德距离 并记录哪一行最接近 理论上 这可以避免与尝试计算非常大的矩阵的距离度量相关的错误 然而 虽然内存中保存的内容不多 但对于大型矩阵来说速度非常慢 我的约