当前位置: 首页 > news >正文

R并行计算

1-lapply()函数介绍:

为什么介绍这个函数呢?因为在windows中使用parLapply()函数和lapply()的结构和用法是非常相似的,我们只需要将原本用lapply(x, fun)迭代函数 直接改写成 parLapply(makeCluster(c1), x, fun)即可,这里的直接改写是非常简单的,只需要设置使用计算机的核数,后面的参数直接挪到parLapply()中。

lapply() :线性数据迭代

lapply是list(列表)和apply(应用)的组合,函数的作用:对一个列表型或者向量型数据应用一个函数,返回值不区分处理对象,皆是列表结构。这个函数开头的第一个字母“l”表明这个函数的返回类型为列表。

返回值的元素个数与处理对象中的元素个数相同。

该函数的语法结构为:

lapply(X, FUN...)

其中

  1. X代表需要执行运算的列表或者向量;
  2. FUN代表需要运行的函数,这个参数的自定义范围非常广,用户可以将几百行代码封装为要给function(函数)来设置该参数;
  3. 三个点 表示FUN中的相应参数设置。

例子1:

使用均值函数mean来分别计算向量x、y和z的平均值,最后结果会以列表的形式现实在console中。

> x <- 1:10
> y <- 1:10
> z <- 1:10
> lapply(list(x,y,z), mean)
[[1]]
[1] 5.5[[2]]
[1] 5.5[[3]]
[1] 5.5

 例子2:

> x <- c(1:10, NA)
> y <- c(1:10, NA)
> z <- c(1:10, NA)
> lapply(list(x,y,z), function(x) {mean(x, na.rm =T)})
[[1]]
[1] 5.5[[2]]
[1] 5.5[[3]]
[1] 5.5

例子3:

lapply函数等价于for循环,循环4次,每次花费时间5秒钟。总共预期花费时间为20秒=4*5秒

> for(i in 1:4){Sys.sleep(5)}
> lapply(1:4, function(i) Sys.sleep(5))
[[1]]
NULL[[2]]
NULL[[3]]
NULL

2-在Windows使用并行计算,使用parLapply()函数

2.1-并行计算的准备阶段:

只要开始执行并行,需要设置使用计算机的核数,以及关闭执行并行。

流程:设置并行计算的核数-->执行并行计算-->关闭并行计算的集群。

无论使使用哪种并行计算包,都是基于上述三个步骤,1-设置并行计算的核数;2 执行并行计算 3 关闭并行计算的集群。

library(parallel)

#Step1 设置并行计算使用的核数

num_cores <- detectCores(logical=FALSE) #返回的是计算机的物理核数 
cl <- makeCluster(num_cores)# 设置并行计算的核心数,这里num_cores是整数,合理即可
 
# Step2: 执行并行计算的任务
result <- parLapply(cl, x, fun)
 
# Step3: 关闭并行计算的集群
stopCluster(cl)

其中:detectCores()#这个函数中参数logical默认取值为TRUE,该函数返回的是计算机的线程数,如果设置logical=FALSE,返回的是物理核数/CPU。

例如计算机是12核24线程,

  • logical=TRUE,返回的是逻辑核数24线程;
  • logical=FALSE,返回的是物理核数12核。

2.2-parLapply()函数介绍

在Windows 系统中使用parLapply()函数替换lapply函数,进行并行计算,只不过多了一个参数即设置集群makeCluster()。 

也就是说,parLapply( )和lapply( )函数是相似的,在执行并行运算的时候,只需要把之前用lapply()函数写的部分

lappy(x, fun)

改写成 

parLapply(makeCluster(4), x, fun)

其中makeCluster(4) 设置并行计算的核数为4.

2.3-使用parLapply()函数编写执行并行计算

对上面的例子3,在windows系统中使用parLapply()函数执行并行计算:

> system.time(for(i in 1:4){Sys.sleep(5)})用户  系统  流逝 0.00  0.00 20.02> system.time(lapply(1:4,function(i)Sys.sleep(5)))用户  系统  流逝 0.02  0.00 20.02system.time(parLapply(makeCluster(4),1:4, function(i) Sys.sleep(5)))
用户 系统 流逝 
0.04 0.01 5.97 

3-在非Windows中使用mclapply()函数

例如,上面例子3使用mclapply函数执行并行计算

system.time(

mclapply(1:4, function(i) Sys.sleep(5), mc.cores=4) 

)

其中参数mc.cores它告诉mclapply()函数自动将独立计算拆分为多少个进程。

参考:

《R数据科学实践:工具详解与案例分析》(2019年6月出版,机工社)

《R的极客理想:量化投资篇》(2018年1月出版,机工社)

《R: Predictive Analysis》(2017年3月出版 中国图书进出口) (介绍了parLapply函数执行并行计算)

并行运算 R - 搜索结果 - 知乎 (zhihu.com)

【多核的春天】R语言里的并行计算 - 知乎 (zhihu.com) (介绍使用foreach函数执行并行计算)

R语言的并行计算 - 知乎 (zhihu.com) 

相关文章:

R并行计算

1-lapply()函数介绍&#xff1a; 为什么介绍这个函数呢&#xff1f;因为在windows中使用parLapply()函数和lapply()的结构和用法是非常相似的&#xff0c;我们只需要将原本用lapply(x, fun)迭代函数 直接改写成 parLapply(makeCluster(c1), x, fun)即可&#xff0c;这里的直接…...

STM32 低功耗-待机模式

STM32 待机模式 文章目录 STM32 待机模式第1章 低功耗模式简介第2章 待机模式简介2.1 进入待机模式2.1 退出待机模式 第3章 待机模式代码部分总结 第1章 低功耗模式简介 在 STM32 的正常工作中&#xff0c;具有四种工作模式&#xff1a;运行、睡眠、停止和待机模式。 在系统或…...

极海APM32F003F6P6烧写问题解决记录

工作中遇到的&#xff0c;折腾了好久&#xff0c;因为电脑重装过一遍系统&#xff0c;软件也都重新安装了&#xff0c;所以不知道之前的配置是什么&#xff0c;旧项目代码编译没问题&#xff0c;烧写时疯狂报错&#xff0c;用的是JLink。 keil版本v5.14 win10版本 JLink版本…...

【大数据】Flink 详解(一):基础篇

Flink 详解&#xff08;一&#xff09;&#xff1a;基础篇 1、什么是 Flink &#xff1f; Flink 是一个以 流 为核心的高可用、高性能的分布式计算引擎。具备 流批一体&#xff0c;高吞吐、低延迟&#xff0c;容错能力&#xff0c;大规模复杂计算等特点&#xff0c;在数据流上提…...

ChatGPT 作为 Python 编程助手

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 简单的数据处理脚本 我认为一个好的起点是某种数据处理脚本。由于我打算让 ChatGPT 之后使用各种 Python 库编写一些机器学习脚本&#xff0c;这似乎是一个合理的起点。 目标 首先&#xff0c;我想尝试…...

饿了么输入框限制只能输入数字,并且保留小数

可以使用饿了么ui中的input-number组件实现输入框只能输入数字&#xff0c;这样就不能输入数字以外的&#xff0c;controls隐藏输入框左右俩边的加减按钮&#xff0c;precision小数点保留多少位&#xff0c;2则是俩位&#xff0c;但是会导致默认值为0.00的情况&#xff0c;俩种…...

kylin-Desktop gsettings 获取或设置系统配置

gsettings提供了对GSetings的命令行操作。GSetings实际上是一套高级API,用来操作dconf。 dconf存储着GNOME3的配置,是二进制格式。它做为GSettings的后端系统存在,暴露出低级API。在GNOME2时代,类似的角色是gconf,但它是以XML文本形式存储。 更接地气的说法是,dconf是G…...

setmap使用

目录 set使用 set的模板参数 构造函数 成员函数 insert iterator ​编辑 find count pair pair 的模板参数 make_pair multiset使用 multiset 的模板参数 set 与 multiset 的区别 count map使用 map 的模板参数 构造函数 insert iterator find ​编辑 cou…...

Python3 网络爬虫开发实战

JavaScript逆向爬虫 JavaScript接口加密技术&#xff0c;JavaScript有以下两个特点&#xff1a; JS代码运行在客户端&#xff0c;所以它必须在用户浏览器加载并运行JS代码公开透明&#xff0c;所以浏览器可以直接获取到正在运行的JS源码。 所以JS代码不安全&#xff0c;任何…...

docker: CMD和ENTRYPOINT的区别

ENTRYPOINT&#xff1a; 容器的执行命令&#xff08;属于正统命令&#xff09; 可以使用--build-arg ENVIROMENTintegration参数覆盖 ocker build --build-arg ENVIROMENTintegration 两者同时存在时 CMD作为ENTRYPOINT的默认参数使用外部提供参数会覆盖CMD提供的参数。 CMD单…...

DC电源模块对于定制的要求主要有这几点

BOSHIDA DC电源模块对于定制的要求主要有这几点 DC电源模块是一种将交流电转换成为稳定的直流电的装置。在现代工业生产中&#xff0c;DC电源模块被广泛应用于各种电子设备中&#xff0c;例如计算机、手机、电视等。为了满足不同用户需求&#xff0c;DC电源模块的定制需求也是…...

Kubernetes高可用集群二进制部署(六)Kubernetes集群节点添加

Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署&#xff08;一&#xff09;主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署&#xff08;二&#xff09;ETCD集群部署 Kubernetes高可用集群二进制部署&#xff08;三&#xff09;部署…...

网关 GateWay 的使用详解、路由、过滤器、跨域配置

一、网关的基本概念 SpringCloudGateway网关是所有微服务的统一入口。 1.1 它的主要作用是&#xff1a; 反向代理&#xff08;请求的转发&#xff09; 路由和负载均衡 身份认证和权限控制 对请求限流 1.2 相比于Zuul的优势&#xff1a; SpringCloudGateway基于Spring5中…...

vsocde里面远程连接服务器报could not esatablish connection xxxx

我在vscode里面远程连接服务器编辑代码时&#xff0c;正常我按F1选择了服务器IP地址&#xff0c;然后让我选在Linux&#xff0c;然后我再输入服务器密码&#xff0c;但是当我选择Linux系统之后直接没出让我输入服务器密码的输入框&#xff0c;而是直接报错 could not esatablis…...

Hi3798MV200 恩兔N2 NS-1 (二): HiNAS海纳思使用和修改

目录 Hi3798MV200 恩兔N2 NS-1 (一): 设备介绍和刷机说明Hi3798MV200 恩兔N2 NS-1 (二): HiNAS海纳思使用和修改Hi3798MV200 恩兔N2 NS-1 (三): 制作 Ubuntu rootfsHi3798MV200 恩兔N2 NS-1 (四): 制作 Debian rootfs 关于 海纳思全称是海思机顶盒NAS系统, 网站 https://www…...

无涯教程-Perl - foreach 语句函数

foreach 循环遍历列表值&#xff0c;并将控制变量(var)依次设置为列表的每个元素- foreach - 语法 Perl编程语言中的 foreach 循环的语法是- foreach var (list) { ... } foreach - 流程图 foreach - 示例 #!/usr/local/bin/perllist(2, 20, 30, 40, 50);# foreach loop ex…...

easyWechat 5.x 复写代码 获取企业微信授权用户敏感信息

复写 (new SocialiteManager($config))->extend(wework, function ($config) {return new \App\Extend\EasyWechat\Work\WeWork($config);});创建的 \App\Extend\EasyWechat\Work\WeWork是我们需要复写的类 <?phpnamespace App\Extend\EasyWechat\Work;use Overtrue\So…...

医疗器械研发中的可用性工程实践(一)

致读者&#xff1a;以前看《楚门的世界》&#xff0c;《蝴蝶效应》&#xff0c;《肖申克的救赎》&#xff0c;《教父》&#xff0c;《横道世之介》&#xff0c;《老友记》&#xff0c;一个人的一生匆匆。作为平凡人就是历史大河中的浪花&#xff0c;顺势而为&#xff0c;起起伏…...

LNMP搭建

LNMP&#xff1a;目前成熟的企业网站的应用模式之一&#xff0c;指的是一套协同工作的系统和相关软件 能够提供静态页面服务&#xff0c;也可以提供动态web服务。 这是一个缩写 L linux系统&#xff0c;操作系统。 N nginx网站服务&#xff0c;也可也理解为前端&#xff0c…...

软件测试分类总结

目录 1.根据源代码可见度划分 1.1黑盒测试 1.2白盒测试 1.3灰盒测试 2.根据开发阶段划分 2.1单元测试 2.2集成测试 2.3系统测试 2.4验收测试 3.按照实施组织划分 3.1α测试 3.2β测试 3.3第三方测试 4.按照是否运行程序划分 4.1静态测试 4.2动态测试 5.根据软件测试工作的…...

模糊PID(三角隶属度函数模糊化CODESYS ST代码)

三角隶属度函数的详细算法介绍,之前的专栏有详细介绍,这里不再展开讨论。相关文章链接如下: 博途三角隶属度函数FC 博途PLC模糊PID三角隶属度函数指令(含Matlab仿真)_博图模糊pid控制_RXXW_Dor的博客-CSDN博客三角隶属度函数FC,我们采用兼容C99标准的函数返回值写法,在…...

探索人工智能 | 计算机视觉 让计算机打开新灵之窗

前言 计算机视觉是一门研究如何使机器“看”的科学&#xff0c;更进一步的说&#xff0c;就是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉&#xff0c;并进一步做图形处理&#xff0c;使电脑处理成为更适合人眼观察或传送给仪器检测的图像。 文章目录 前言…...

7.物联网操作系统互斥信号量

1.使用互斥信号量解决信号量导致的优先级反转&#xff0c; 2.使用递归互斥信号量解决互斥信号量导致的死锁。 3.高优先级主函数中多次使用同一信号量的使用&#xff0c;使用递归互斥信号量&#xff0c;但要注意每个信号量的使用要对应一个释放 优先级翻转问题 优先级翻转功能需…...

Vue - Element el-form 表单对象多层嵌套校验

针对el-form的数据源是对象嵌套对象&#xff0c;在进行数据绑定和校验时和单层的对象有一点区别&#xff0c; 具体是下面两部分&#xff1a; 数据源&#xff1a; fromData: {name: ,health: {height: } }1、 给 el-form-item 的 prop设为&#xff1a;prop"health.height&…...

elementUI全屏loading的使用(白屏的解决方案)

官网中有使用方法&#xff0c;但是我实际上手之后会出现白屏&#xff0c;解决办法如下&#xff1a; <el-button type"text" size"small" click"delRow(scope)"> 删除</el-button>loading: false, // loading 动画loadingInstance…...

flutter开发实战-flutter_spinkit实现多种风格进度指示器

flutter开发实战-flutter_spinkit实现多种风格进度指示器 最近开发过程中flutter_spinkit&#xff0c;这个拥有多种种风格加载指示器 一、flutter_spinkit 引入flutter_spinkit # 多种风格的模糊进度指示器flutter_spinkit: ^5.1.0效果示例 const spinkit SpinKitRotatingC…...

检测文本是否由AI生成,GPT、文心一言等均能被检测

背景 目前很多机构推出了ChatGPT等AI文本检测工具&#xff0c;但是准确率主打一个模棱两可&#xff0c;基本和抛硬币没啥区别。 先说结论&#xff0c;我们对比了常见的几款AI检测工具&#xff0c;copyleaks检测相比较而言最准确。 检测文本 AI文本片段1 来源&#xff1a;G…...

【3D机甲】捏造型功能

文章目录 1. 模型选择2. 变形和调整3. 材质和纹理4. 部件修改5. 关节和动作6. 物理模拟 3D机甲捏造型功能通常包括以下小功能&#xff1a; 模型选择&#xff1a;通过从库中选择机甲模型或导入自定义模型来开始设计。 变形和调整&#xff1a;调整机甲的大小、比例、旋转和位置&…...

设计模式之五:单例模式

有些对象只需要有一个&#xff0c;比如线程池、缓存和注册表等。 对比全局变量&#xff0c;其需要在程序开始就创建好对象&#xff0c;如果这个对象比较耗资源&#xff0c;而在后面的执行过程中又一直没有用到&#xff0c;就造成了浪费。 class Singleton {private:static Si…...

MATLAB的设置路径

在主页下的 或者在命令行输入path&#xff0c;命令行会出现所有路径 必须要将某些函数.m文件以及一些类文件包含在路径当中&#xff0c;否则在脚本代码中输入代码时&#xff0c;不会有代码提示...