首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >对余弦距离进行并行化的最佳方法是哪种?

对余弦距离进行并行化的最佳方法是哪种?
EN

Stack Overflow用户
提问于 2016-11-13 13:12:17
回答 1查看 479关注 0票数 0

当我试图用大数据集计算余弦距离时,我的R会话在超时超过后崩溃(~600,000行)

对于小型数据集,我的代码工作,这是一个例子:

代码语言:javascript
运行
AI代码解释
复制
library(lsa)
relevant.data <- as.matrix(mtcars)
cosine(t(relevant.data))

我在这个网站上读过一些文章来并行余弦函数,但是没有运气。

是否存在一个非常有效的方法?

你认为rccp喜欢这篇文章吗?并行余弦距离聚类在R中的应用

如果像相关矩阵这样的计算效率很低。你有什么建议?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-13 13:32:35

Rcpp中编写代码可能会给您带来足够的开销,因此您不需要额外的并行处理。下面的例子(但我不知道它在您的系统上会做什么/对于一个实际大小的问题):长度1e8的向量(相当于10,000乘10,000矩阵)需要763 be,所以即使将结果存储在60^2倍大的问题(如果计算正确的话=2.75Tb)也可能很难.)。

代码语言:javascript
运行
AI代码解释
复制
x <- as.matrix(mtcars)
library(lsa)

函数来自lsa

代码语言:javascript
运行
AI代码解释
复制
cosine(as.matrix(mtcars))

略减R码:

代码语言:javascript
运行
AI代码解释
复制
cosR <- function(x) {
      co <- array(0, c(ncol(x), ncol(x)))
      ## f <- colnames(x)
      ## dimnames(co) <- list(f, f)
      for (i in 2:ncol(x)) {
        for (j in 1:(i - 1)) {
            co[i,j] <- crossprod(x[,i], x[,j])/
                sqrt(crossprod(x[,i]) * crossprod(x[,j]))
        }
    }
    co <- co + t(co)
    diag(co) <- 1
    return(as.matrix(co))
}

Rcpp版本,从这里略作修改

代码语言:javascript
运行
AI代码解释
复制
library(Rcpp)
library(RcppArmadillo)
cppFunction(depends='RcppArmadillo',
            code="NumericMatrix cosCpp(NumericMatrix Xr) {
            int n = Xr.nrow(), k = Xr.ncol();
            arma::mat X(Xr.begin(), n, k, false); // reuses memory and avoids extra copy
            arma::mat Y = arma::trans(X) * X; // matrix product
            arma::mat res = Y / (arma::sqrt(arma::diagvec(Y)) * arma::trans(arma::sqrt(arma::diagvec(Y))));
            return Rcpp::wrap(res);
           }")

测试平等:

代码语言:javascript
运行
AI代码解释
复制
identical(cosR(x),unname(cosine(x)))
all.equal(cosCpp(x),cosR(x))

library(microbenchmark)
microbenchmark(cosine(x),cosR(x),cosCpp(x))
## Unit: nanoseconds
##       expr    min      lq       mean  median      uq      max neval cld
##  cosine(x) 460046 1181837 2069604.51 1530719 2528021  8757989   100   b
##    cosR(x) 542414 1096448 1915011.12 1331277 2321596 11740233   100   b
##  cosCpp(x)      7   12472   35827.76   17999   30556   644551   100  a 

Rcpp版本的速度大约是1331277/17999的74倍,并且可能(?)帮你解决内存问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40578876

复制
相关文章
Facebook开发者 4 种首选语言!
“重要的是,我们采用的每种语言都最适合特定的用例;因此每当我们评估一种语言时,我们都会尽职尽责。语言决策一旦做出就会被坚持下去,因此我们希望从一开始就深思熟虑,为我们的工程师提供最好的工具。”
逆锋起笔
2022/11/30
3970
Facebook开发者 4 种首选语言!
为什么Python是数据科学家的首选语言
在21世纪的数据时代,数据科学家是最令人艳羡的职业之一。他们使用各种工具和技术挖掘大量数据,从而帮助组织做出数据驱动的决策。在这些工具和技术中,Python语言以其易于学习、强大的功能和广泛的应用,已经成为了数据科学家的首选。
TechLead
2023/10/21
3260
为什么Python是数据科学家的首选语言
Python已成为网络攻击的首选编程语言
调查数据表明,目前的GitHub代码库中,有超过20%的网络攻击工具或PoC代码都是采用Python编写的。
FB客服
2018/12/05
7050
Python已成为网络攻击的首选编程语言
Python为什么成为人工智能的首选语言
之前一直都是在学习Python与机器学习,深度学习。但是究竟为什么在众多的编程语言中选择Python作为人工智能的首选语言呢我一直不得而知,今天就来以我的理解来梳理下吧。首先在我不再赘述Python的前世今生,只是深入的说一下Python与人工智能的关系。
王荣胜
2020/03/13
1.8K0
什么是Java语言(学习一门语言首选了解这们语言)
一、什么是Java 通俗将就是计算机语言的最新版本,计算机经历了C语言、C++语言、以及C+±-语言。这里的C++ – -语言就是Java语言。Java语言是C语言的第三个计算机语言革命,C++语言是对C语言不足处的改进,的一门语言。而Java语言是面对C++语言的不做又一步的改进。为最大的革进新颖,决定不叫C+±-而后一些过程,最终叫Java。 Java与C语言以及C++语言相比的优势其又跨平台性、可移植性。
全栈程序员站长
2022/09/08
3010
编程为什么入门首选C语言呢
为什么入门首选C语言呢 C语言除了能让我们了编程的大门,也让我们了解到程序的运行原理,和计算机底层是如何交互的,这些底层的知识决定了你的高度,也决定了你的未来的职业生涯。 如果你想成为出类拔萃的人,只要你用心去学号C语言,你会发现当你再去学习别的语言的时候有,短时间内就能搞定一门语言。这是毋庸置疑的!说C语言是现代编程语言的开山鼻祖一点也不夸张。 大学期间,只要C语言是大部分专业的基础课,当时大一的自己还不知道这门课的重要性,没有好好学。现在有时间来恶补一下C语言,也算对自己的一种鞭策和提升吧。 世界编
企鹅号小编
2018/02/28
1.2K0
编程为什么入门首选C语言呢
Java失宠,谷歌宣布Kotlin现在是Android开发的首选语言
谷歌昨天宣布,Kotlin 编程语言现在是 Android 应用程序开发人员的首选语言。
新智元
2019/05/15
1.3K0
Java失宠,谷歌宣布Kotlin现在是Android开发的首选语言
如何看待 Google 将 Kotlin 作为 Android 开发首选语言?
相比两年前第一次大范围的出现在公众面前,Kotlin 这一次其实有点儿顺其自然了,成为首选是情理之中的事儿,没什么大惊小怪的。
bennyhuo
2020/02/20
8680
Python超过R,成为数据科学和机器学习的首选语言!
| 全文1765共字,建议阅读时长3分钟 | 近期,数据挖掘资讯网站KDnuggets开展了一项调查,问题是“2016年和2017年,在数据分析、数据科学和机器学习工作中,你使用R、Python、两者都用,还是其他工具?” # 高能预警:下文含多张辣眼睛的配图,请做好防护…… 对954名受访者的调查显示,Python尚未完全“吞噬”R,但2017年Python生态系统已经超越了R,成为数据分析、数据科学和机器学习领域领先的平台,同时也在迅速吸引其他平台的用户。 2016年,Python排名第二(
AI科技大本营
2018/04/26
8760
Python超过R,成为数据科学和机器学习的首选语言!
Java与Kotlin, 哪个是开发安卓应用的首选语言?
Java是很多开发者创建安卓应用的首选语言。但它在 Android 界的领导地位正受到各种新语言的挑战,Kotlin就是其一。虽然Kotlin最近才开始受到热捧,但有为数不少的人相信 Kotlin 在不久的将来,会成为Java最大的竞争者,甚至会把 Java 拉下移动开发的王座。下文中,我们对 Java 和 Kotlin 进行详细对比,以帮助您确定哪一种语言最适合于您今后的移动开发项目 。
LiveEdu
2018/05/31
4.4K0
Java与Kotlin, 哪个是开发安卓应用的首选语言?
为什么Python是入行人工智能的首选语言?
在所有编程语言里,Python并不算萌新,从1991年发布第一个版本,至今已经快30年了。
顶级程序员
2018/07/23
1.5K0
iOS CoreAudio AudioStreamBasicDescription 音频格式概念简介
AudioStreamBasicDescription 简称 ASBD,ASBD 是 CoreAudio 用来指定线性PCM格式,或者使用 CBR 编码的等大小声道的格式。如果使用的是 VBR,或者使用非等大小的 CBR,需要对每个packet独立设置 AudioStreamPacketDescription进行描述。
JoeyBlue
2021/09/07
1.6K0
盘点儿童智力开发的首选编程语言——Scratch
Scratch作为少儿编程的首选编程语言,这几年发展的如火如荼,当然,这主要还是因为它简单易学,不用掌握太多概念即可编程,这意味着你不用认识英文单词,编程照样行云流水,是不是很激动?那么现在让我们一起进入Scratch的世界吧。
Python进阶者
2021/08/18
1.3K0
Java失宠,谷歌宣布Kotlin现在是Android开发的首选语言
谷歌今天宣布,Kotlin 编程语言现在是 Android 应用程序开发人员的首选语言。
Android技术干货分享
2019/05/15
1K0
Java失宠,谷歌宣布Kotlin现在是Android开发的首选语言
盘点儿童智力开发的首选编程语言——Scratch
Scratch作为少儿编程的首选编程语言,这几年发展的如火如荼,当然,这主要还是因为它简单易学,不用掌握太多概念即可编程,这意味着你不用认识英文单词,编程照样行云流水,是不是很激动?那么现在让我们一起进入Scratch的世界吧。
前端皮皮
2021/08/20
1.1K0
盘点儿童智力开发的首选编程语言——Scratch
吃惊:Kotlin 有望超越 Java 成为 Android 首选编程语言
你们现在在使用 Kotlin 进行 Android 开发么?这份报告的结果让我很是吃惊,根据 Realm 最新的报告显示,认为 Kotlin 在 Android 开发领域所占份额很有可能将在 2018
非著名程序员
2018/02/02
7180
吃惊:Kotlin 有望超越 Java 成为 Android 首选编程语言
下个10年,Go能取代Python成为开发者的首选语言吗?
选自towardsdatascience 作者:Dasaradh S K 机器之心编译
统计学家
2020/11/06
5000
下个10年,Go能取代Python成为开发者的首选语言吗?
下个10年,Go能取代Python成为开发者的首选语言吗?
选自towardsdatascience 作者:Dasaradh S K 机器之心编译 机器之心编辑部 Go为什么是2020年最受欢迎的语言?这篇文章也许能够给你答案。 30年前,Python首次出现,但它花了20年的时间才获得开发者们的赏识。直到2019年,Python才成为最受开发者喜爱的第二大语言。Python在过去,尤其是在过去5年中的增长是非常巨大的。如今它已成为机器学习和数据科学开发者的首选语言。 在接下来的几年中,Python无疑还将继续在这些领域占据主导地位。但是,与一些新兴语言相比
机器之心
2023/03/29
6040
下个10年,Go能取代Python成为开发者的首选语言吗?
点击加载更多

相似问题

如何从CoreAudio获取首选通道布局

00

CoreAudio - kAudioFileUnsupportedDataFormatError

30

确定用户的首选语言

10

Powershell设置MSolUser的首选语言

12

首选终端脚本语言

124
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档