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

【R语言】鉴于计算10亿以内训练模型记录for循环的加速

文章目录

    • 1 前言
    • 2 几个循环
      • 2.1 100以内的和
      • 2.2 100以内奇数和/偶数和
    • 3 多重循环
      • 3.1 向量化
      • 3.2 合并循环
      • 3.3 apply函数
      • 3.4 矩阵运算
      • 3.5 foreach分解任务
    • 4 讨论

1 前言

笔者主力机是MBAM1芯片(8+256),某个下午巩固循环突然思考到个问题,小循环很快就能run出来,中循环还勉勉强强,稍微上点强度就运行的很慢。虽然是CPU占用100%,8颗核心好像是偷着懒跑的,但是丢给我那台4核心8线程黑苹果,是跑满的,说明ARM在多线程的时候,有点东西

下图是计算一个10亿内训练模型时的top

2 几个循环

2.1 100以内的和

### for
sum <- 0
for (i in 1:100) {sum <- sum + i
}
print(sum)### while
sum <- 0
i <- 1
while (i <= 100) {sum <- sum + ii <- i + 1
}
print(sum)

2.2 100以内奇数和/偶数和

### for
odd_sum <- 0
even_sum <- 0for (i in 1:100) {if (i %% 2 == 0) {even_sum <- even_sum + i} else {odd_sum <- odd_sum + i}
}print(paste("奇数和:", odd_sum))
print(paste("偶数和:", even_sum))### while
odd_sum <- 0
even_sum <- 0
i <- 1while (i <= 100) {if (i %% 2 == 0) {even_sum <- even_sum + i} else {odd_sum <- odd_sum + i}i <- i + 1
}print(paste("奇数和:", odd_sum))
print(paste("偶数和:", even_sum))

3 多重循环

以下仅记录和提供思路,具体情况具体分析,但是有一点思维模式很得益

3.1 向量化

假设计算两个向量x和y的点积,使用for循环分别游历,相乘再相加:

x <- c(1, 2, 3, 4, 5)
y <- c(5, 4, 3, 2, 1)
dot_product <- 0
for (i in 1:length(x)) {dot_product <- dot_product + x[i] * y[i]
}
print(dot_product)

向量化,可以理解为对号入座,亮点就是sum()*

x <- c(1, 2, 3, 4, 5)
y <- c(5, 4, 3, 2, 1)
dot_product <- sum(x * y)
print(dot_product)

3.2 合并循环

假设对两个矩阵A和B中的每个元素进行遍历,将它们相加,并将结果保存到矩阵C中。可以使用两个嵌套的for循环实现:

A <- matrix(1:9, 3, 3)
B <- matrix(10:18, 3, 3)
C <- matrix(0, 3, 3)
for (i in 1:nrow(A)) {for (j in 1:ncol(A)) {C[i, j] <- A[i, j] + B[i, j]}
}
print(C)#输出结果:[,1] [,2] [,3]
[1,]   11   13   15
[2,]   17   19   21
[3,]   23   25   27

但是理解这类的目的,合并循环的思路在这里刚好就是矩阵一一对应的数字相加:

A <- matrix(1:9, 3, 3)
B <- matrix(10:18, 3, 3)
C <- A + B
print(C)

3.3 apply函数

假设有一个3x3的二维矩阵mat,需要将矩阵中每个元素求平方。我们可以使用for循环来实现:

mat <- matrix(1:9, 3, 3)
result <- matrix(0, 3, 3)
for (i in 1:nrow(mat)) {for (j in 1:ncol(mat)) {result[i, j] <- mat[i, j] ^ 2}
}
print(result)

apply+function

mat <- matrix(1:9, 3, 3)
result <- apply(mat, c(1, 2), function(x) x^2)
print(result)

3.4 矩阵运算

假设需要计算一个矩阵A的逆矩阵,使用for循环和矩阵运算实现:

A <- matrix(c(1, 2, 3, 4), 2, 2)
det_A <- A[1, 1] * A[2, 2] - A[1, 2] * A[2, 1]
adj_A <- matrix(c(A[2, 2], -A[1, 2], -A[2, 1], A[1, 1]), 2, 2)
A_inv <- adj_A / det_A
print(A_inv)#输出结果:[,1] [,2]
[1,] -2.0  1.0
[2,]  1.5 -0.5

若要优化这一步骤,很简单,直接用solve()

A <- matrix(c(1, 2, 3, 4), 2, 2)
A_inv <- solve(A)
print(A_inv)

3.5 foreach分解任务

foreach包实现多线程for循环

library(foreach)
library(doParallel)# 创建一个1000行,1000列的矩阵
m <- matrix(runif(1000000), nrow = 1000)# 初始化并行计算环境
cl <- makeCluster(detectCores())
registerDoParallel(cl)# 使用foreach包和%dopar%运算符进行并行计算
result <- foreach(i = 1:nrow(m), .combine = "+") %dopar% sum(m[i, ])# 结束并行计算环境
stopCluster(cl)# 输出结果
print(result)

有人会说,这不就是用了个函数吗?

是,但又不完全是,不然为何有人懂得用这个函数,但有人需要一步一步算(并非说一步一步算不好,只有自己算过,理解了,才懂得去挖掘深度,化繁为简)

4 讨论

如果只知道个函数是知其然而不知其所以然,但是只知道计算过程便如优化前的一样,一步一步计算。得益于现在互联网发展的飞起,各种便利工具各种开源方法,几乎人人都是调包侠,但是当现成的辅佐无法满足时还是需要回归底层。最近深有感触,不论是数据挖掘、还是机器学习深度学习、人工智能、全栈,分析的尽头就是算法

相关文章:

【R语言】鉴于计算10亿以内训练模型记录for循环的加速

文章目录 1 前言2 几个循环2.1 100以内的和2.2 100以内奇数和/偶数和 3 多重循环3.1 向量化3.2 合并循环3.3 apply函数3.4 矩阵运算3.5 foreach分解任务 4 讨论 1 前言 笔者主力机是MBAM1芯片&#xff08;8256&#xff09;&#xff0c;某个下午巩固循环突然思考到个问题&#…...

C++类和对象 ——构造函数

C拷贝构造函数详解 什么是拷贝构造函数&#xff1f;拷贝构造函数的特征默认拷贝构造函数为什么需要显示定义构造函数&#xff1f;拷贝构造函数的调用场景什么时候不需要自己定义拷贝构造函数 什么是拷贝构造函数&#xff1f; 在现实生活中&#xff0c;拷贝构造函数就好像我们上…...

第2章-分治法

第2章-分治法 总分&#xff1a;100分 得分&#xff1a;20.0分 1 . 多选题 中等 10分 有关以下代码&#xff0c;说法正确的是&#xff08; ABCE&#xff09; def BinarySearch(s, x, low, high):if (low > high):return -1middle (low high) / 2if (x s[mid…...

20天能拿下PMP吗?

新版大纲&#xff0c;专注于人员、过程、业务环境三个领域&#xff0c;内容贯穿价值交付范围&#xff08;包括预测、敏捷和混合的方法&#xff09;。除了考试时间由240分钟变更为230分钟、200道单选题变为180道&#xff08;包含单选和多选&#xff09;之外&#xff0c;新考纲还…...

Word处理控件Aspose.Words功能演示:在 Java 中将 Word DOC/DOCX 转换为 PDF

Aspose.Words是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。 Aspose API支持流行文件格式处理&#xff0c;并…...

数据安全的重要性

数据安全非常重要&#xff0c;因为我们生活在数字化时代&#xff0c;许多信息和数据都以数字形式存储和传输。如果这些数据受到未经授权的访问、篡改、泄露或破坏&#xff0c;会对个人、组织和国家造成严重的损失。 以下是数据安全的重要性&#xff1a; 1. 保护各类隐私&#x…...

要创建富文本内容?Kendo UI Angular组件有专门的编辑器应对!

您的Angular应用程序可能需要允许用户添加带有格式化选项的文本、图像、表格、外观样式和/或链接&#xff0c;使用Kendo UI for Angular的编辑器&#xff0c;可以轻松搞定这些&#xff01; Kendo UI for Angular是专业级的Angular UI组件库&#xff0c;不仅是将其他供应商提供…...

工赋开发者社区 | 装备制造企业数字化转型总体框架

导读 当前&#xff0c;面对技术、市场以及供应链等多重挑战&#xff0c;在软件定义、数据驱动、数字孪生、大数据、人工智能及元宇宙等技术加持下&#xff0c;装备制造企业不断采用新工艺、新材料&#xff0c;以新模式推动产品快速创新。企业积极关注并探索数字化转型路径&…...

Python趋势外推预测模型实验完整版

趋势外推预测模型实验完整版 实验目的 通过趋势外推预测模型&#xff08;佩尔预测模型&#xff09;&#xff0c;掌握预测模型的建立和应用方法&#xff0c;了解趋势外推预测模型&#xff08;佩尔预测模型&#xff09;的基本原理 实验内容 趋势外推预测模型 实验步骤和过程…...

KALI入门到高级【第三章】

预计更新第一章 入门 1.1 什么是Kali Linux&#xff1f; 1.2 安装Kali Linux 1.3 Kali Linux桌面环境介绍 1.4 基本命令和工具 第二章 信息收集 1.1 网络扫描 1.2 端口扫描 1.3 漏洞扫描 1.4 社交工程学 第三章 攻击和渗透测试 1.1 密码破解 1.2 暴力破解 1.3 漏洞利用 1.4 特…...

React Native中防止滑动过程中误触

React Native中防止滑动过程中误触 在使用React Native开发的时&#xff0c;当我们快速滑动应用的时候&#xff0c;可能会出现误触&#xff0c;导致我们会点击到页面中的某一些点击事件&#xff0c;误触导致页面元素响应从而进行其他操作,表现出非常不好的用户体验。 一、问题…...

【c语言】函数递归调用

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ…...

SPSS如何进行判别分析之案例实训?

文章目录 0.引言1.一般判别分析2.逐步判别分析3.决策树分析 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对SPSS进行了学习&#xff0c;本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本文对判别分析进行阐述。 1…...

Windows 10 字体模糊发虚的问题及解决方法

Windows 10字体模糊发虚! 如何解决?Windows 10是一款常见的操作系统&#xff0c;它拥有各种各样的功能&#xff0c;但是有些用户发现&#xff0c;在使用Windows 10时&#xff0c;字体会变得模糊发虚&#xff0c;这给用户带来了很多不便。下面&#xff0c;我们就来看看如何解决…...

渔人杯部分wp

文章目录 渔人杯神仙姐姐阿拉丁飘啊飘 渔人杯 神仙姐姐 点击拜 &#xff0c;抓包发现get请求了/sx.php 返回如下 {"code":0,"num":1,"flag":"ctfsh0w-f1ag-n0t-h3r3-th1s-msg-just-a-j0ke-}{"}在repeater重复请求&#xff0c;发现…...

测试用例覆盖不全面的解决方法

测试用例覆盖不全面的解决方法 问题分析 在测试用例设计过程中&#xff0c;容易出现思维受限或者需求盲区&#xff0c;我们不可能完全覆盖用户使用的所有场景&#xff0c;编写测试用例的时不可能把所有的场景都能想周全&#xff0c;把所有的场景下的情况都写成测试用例去模拟、…...

AWS Lambda - 第一部分

Hello大家好&#xff0c;我们今天开始讨论AWS Lambda的内容。 SAP认证考试会涉及到很多Lambda的内容&#xff0c;想要通过认证考试虽然不一定非要精通开发&#xff0c;但需要知道Lambda的一些功能和特性、适用场景以及Lambda是如何工作的。 我们开始吧&#xff01; Lambda与…...

Java 基础进阶篇(七)—— 面向对象三大特征之三:多态

文章目录 一、多态的概述二、多态中成员访问特点 ★三、多态的优势与劣势四、多态下的类型转换4.2 自动类型转换&#xff08;从子到父&#xff09;4.2 强制类型转换&#xff08;从父到子&#xff09;4.3 instanceof 关键字 一、多态的概述 多态&#xff1a;是指执行同一个行为…...

day9 实现UDP通信

目录 socket函数拓展 UDP通信实现过程 代码实现 socket函数拓展 send与recv函数&#xff1a; /*用于发送数据*/ ssize_t send(int sockfd, const void *buf, size_t len,int flags);/*用于接收数据*/ ssize_t recv(int sockfd, void *buf, size_t len,int flags);/*前三个…...

自然语言处理(NLP)在放射学报告评价中的应用:应用和技术进展

自然语言处理&#xff08;NLP&#xff09;在放射学报告评价中的应用&#xff1a;应用和技术进展 写在最前面摘要引言先进的技术BERT算法优点 Applications in Radiology 放射学应用Quality 质量将关键发现通知转诊临床医生放射科关键绩效指标和评估 个别放射科医生的表现同行学…...

日常开发为什么需要做Code Review

日常开发为什么需要做Code Review 一、背景 最近在开始一个新的项目&#xff0c;在查看项目中代码及具体细节时&#xff0c;发现这个项目真实一堆乱麻&#xff0c;没有规律可循&#xff0c;可总结下这个项目的缺陷 没有规律可循&#xff0c;没有结构性设计不做公共封装&#…...

OSPF的优化

O_ASE --- 标志域外路由信息 --- 因为域外的路由信息不可控性较强&#xff0c;所以&#xff0c;信任程度较低&#xff0c;我们将其优先级设置为150。 LSA --- 链路状态通告 --- OSPF协议在不同网络环境下产生的用于携带和传递不同的信息。 LSDB --- 链路状态数据库 SPF --- 最短…...

C++项目中打破循环依赖的锁链:实用方法大全

C项目中打破循环依赖的锁链 一、简介&#xff08;Introduction&#xff09;1.1 循环依赖的定义&#xff08;Definition of Circular Dependencies&#xff09;1.2 循环依赖带来的问题&#xff08;Problems Caused by Circular Dependencies&#xff09;1.3 解决循环依赖的重要性…...

IDEA连接HBase

新建maven工程 打开pom.xml添加hbase需要的依赖 <dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>2.3.5</version> </dependency><dependency><groupId>org.apa…...

Mask2Former来了!用于通用图像分割的 Masked-attention Mask Transformer

原理https://blog.csdn.net/bikahuli/article/details/121991697 源码解析 论文地址&#xff1a;http://arxiv.org/abs/2112.01527 项目地址&#xff1a;https://bowenc0221.github.io/mask2former Mask2Former的整体架构由三个组件组成&#xff1a; 主干特征提取器&#xff…...

【量化课程】01_投资与量化投资

文章目录 1.1 什么是投资1.1.1 经济意义上的投资1.1.2 投资的分类1.1.3 金融投资1.1.4 个人投资者投资品种1.1.5 投资VS投机 1.2 股票投资的基本流程1.3 常见的股票投资分析流派1.3.1 投资者分析流派 1.4 什么是量化投资1.4.1 量化投资基本概念1.4.2 量化投资的优势1.4.3 量化投…...

SpringBoot实现导出Excel功能

1 问题背景 需求要做一个导出excel的功能 2 前言 本篇着重阐述后端怎么实现&#xff0c;前端实现的部分只会粗略阐述。该实现方案是经过生产环境考验的&#xff0c;不是那些拿来练手的小demo。本文阐述的方案可以借鉴用来做毕设或者加到自己玩的项目中去。再次声明&#xff0c;…...

NSSCTF之Misc篇刷题记录⑧

NSSCTF之Misc篇刷题记录 [MMACTF 2015]welcome[广东强网杯 2021 团队组]欢迎参加强网杯[虎符CTF 2022]Plain Text[SWPUCTF 2021 新生赛]原来你也玩原神[SWPUCTF 2021 新生赛]我flag呢&#xff1f;[鹤城杯 2021]New MISC NSSCTF平台&#xff1a;https://www.nssctf.cn/ PS&…...

从零开始学习Linux运维,成为IT领域翘楚(七)

文章目录 &#x1f525;Linux下常用软件安装_JDK和Tomcat安装&#x1f525;Linux下常用软件安装_MySQL安装&#x1f525;Linux下常用软件安装_MySQL卸载 &#x1f525;Linux下常用软件安装_JDK和Tomcat安装 Jdk 安装 解压jdk安装包 tar -zxvf jdk-8u201-linux-x64.tar.gz -C/…...

优漫动游设计APP的UI界面需要注意哪些问题?

一、加载   加载时间的长短&#xff0c;很大程度的决定了用户体验是否有所提升&#xff0c;虽然理想中的页面加载出来应该一秒就够了&#xff0c;但是设计师不要忽略网络问题!如果网速不够的话&#xff0c;页面加载三五秒都算是快的了&#xff0c;所以在用户等待的过程中&a…...

域名解析记录值填什么/一个网站可以优化多少关键词

4 案例4&#xff1a;部署Multipath多路径环境 4.1 问题 通过Multipath&#xff0c;实现以下目标&#xff1a; 在共享存储服务器上配置iSCSI&#xff0c;为应用服务器共享存储空间 应用服务器上配置iSCSI&#xff0c;发现远程共享存储 应用服务器上配置Multipath&#xff0c;将相…...

家居网站建设基本流程/产品品牌推广策划方案

本文纯属个人见解&#xff0c;是对前面学习的结总&#xff0c;如有描述不准确的地方还请高手指正~ mysql insert作操详解 INSERT法语&#xff1a; INSERT [LOW_PRIORITY |DELAYED| HIGH_PRIORITY] [IGNORE] [INTO]tbl_name[(col_name,...)] VALUES ({expr| DEFAULT},...),(...)…...

网站建设合同 费用/百度宁波营销中心

如何通过计算机的命令提示符(cmd.exe)连接 Oracle 数据库?DOS命令行连接oracle数据库假设有一个 Oracle 数据库信息如下&#xff1a;IP:192.168.0.1SID:orcl端口号&#xff1a;1521用户名&#xff1a;testuser密码&#xff1a;123456在本地客户端中配置的服务名为&#xff1a;…...

建设信用卡官方网站/培训心得体会800字

电大计算机科学与技术c语言各章练习题答案各章练习题答案第1章 C语言概述1.1 简答题1 答&#xff1a;C语言单词分为保留字、标识符、字面常量、运算符和分隔符5类。2 答&#xff1a;首字符必须是英文字母或下划线&#xff1b;其余位置上的字符必须是英文字母、十进制数字符号或…...

做网站与运营一般多少钱/seo技巧是什么

若初次接触移至多线程请先移至JavaSE 多线程初次接触 线程安全与sychornized理解1.作为了解的知识1.1 常见的线程调度模型有哪些&#xff1f;1.2 和线程调度有关的方法2.关于多线程并发环境下&#xff0c;数据的安全问题&#xff08;重点&#xff09;。2.1为什么这个是重点2.2什…...

wordpress编辑用户头像/网络广告人社区官网

上一篇文章介绍了RSA涉及的数学知识&#xff0c;本章将应用这些知识详解RSA的加密与解密。 RSA算法的密钥生成过程 密钥的生成是RSA算法的核心&#xff0c;它的密钥对生成过程如下&#xff1a; 1. 选择两个不相等的大素数p和q&#xff0c;计算出npq&#xff0c;n被称为RSA算法的…...