scala条件替换_scala - 有没有办法用scala中的高阶方法替换嵌套的For循环 - SO中文参考 - www.soinside.com...
有没有办法用scala中的高阶方法替换嵌套的For循环
问题描述 投票:0回答:1
我有一个mutableList,并希望获取所有行的总和,并根据某些条件将其行替换为其他值。下面的代码对我来说工作正常,但我想问有没有办法摆脱嵌套的for循环,因为循环会降低性能。我想使用scala高阶方法而不是嵌套for循环。我尝试了flodLeft()更高阶的方法来替换单个for循环但是无法实现替换嵌套for循环
def func(nVect : Int , nDim : Int) : Unit = {
var Vector = MutableList.fill(nVect,nDimn)(math.random)
var V1Res =0.0
var V2Res =0.0
var V3Res =0.0
for(i
for (j
var resultant = Vector(i).zip(Vector(j)).map{case (x,y) => x + y}
V1Res = choice(Vector(i))
V2Res = choice(Vector(j))
V3Res = choice(resultant)
if(V3Res > V1Res){
Vector(i) = res
}
if(V3Res > V2Res){
Vector(j) = res
}
}
}
}
scala
1个回答
1
投票
这段代码中没有“for循环”; for语句已被编译器转换为foreach调用,因此它已经使用了高阶方法。这些foreach调用可以明确写出,但它对性能没有任何影响。
使代码编译然后清理它给出了:
def func(nVect: Int, nDim: Int): Unit = {
val vector = Array.fill(nVect, nDim)(math.random)
for {
i
j
} {
val res = vector(i).zip(vector(j)).map { case (x, y) => x + y }
val v1Res = choice(vector(i))
val v2Res = choice(vector(j))
val v3Res = choice(res)
if (v3Res > v1Res) {
vector(i) = res
}
if (v3Res > v2Res) {
vector(j) = res
}
}
}
请注意,使用单个for对结果没有任何影响,它看起来更好!
此时很难进一步改进。唯一可能的并行性是内部map调用,但矢量化这几乎肯定是一个更好的选择。如果choice很昂贵,那么结果可能会被缓存,但是当vector更新时,需要更新此缓存。
如果choice可以在计算完所有交叉总和之后的第二遍中完成,那么它将更加平行,但显然也会改变结果。
热门问题
scala条件替换_scala - 有没有办法用scala中的高阶方法替换嵌套的For循环 - SO中文参考 - www.soinside.com...相关推荐
- scala中的高阶函数_Scala中的高阶函数(HOF)
scala中的高阶函数 Higher Order Functions (HOF) in Scala are the very core of this functional programming l ...
- 【大数据开发】scala——tuple、list(含高阶方法)、wordcount案例、set、并行处理数据和sorted、sortBy、sortWith的区别
文章目录 一.元组 1.1元组的定义.遍历 1.2元组的拉链.解链 二.list 2.1空list.list初始化.list遍历3种方式 2.2list的追加.拼接操作 2.3list的基本操作 2. ...
- Scala中的高阶函数
Scala混合了面向对象和函数式的特性.在函数式编程语言中,函数是"头等公民",可以像任何其他数据类型一样被传递和操作.每当你想要给算法传入明细动作时这个特性就会变得非常有用.在函 ...
- oracle 双引号替换,oracle - Oracle SQL-Loader在值中有效地处理内部双引号 - SO中文参考 - www.soinside.com...
如果您在封闭的字段中没有管道,则可以从控制文件中执行此操作.如果你可以在一个字段中同时拥有管道和双引号,那么我认为你别无选择,只能对这些文件进行预处理. 你的解决方案[1],取代双引号with an ...
- scala编程第16章学习笔记(3)——List类的高阶方法
列表间映射:map.flatMap和foreach 1.xs map f 操作返回把函数f应用在xs的每个列表元素之后由此组成的新列表.如: scala> List(1, 2, 3) map ( ...
- php重构ifelse,php - 重构条件语句PHP - SO中文参考 - www.soinside.com
我确实使用带有大型if-elseif语句的post方法制作了User类,如下所示: class Users { public static function post($request) { if ( ...
- java junit 私有方法_有没有办法在Junit5中的另一个方法中模拟私有方法调用
下面是我想测试的方法,但据我所知Junit5不支持PowerMockito.那么有什么方法可以在另一个方法内部模拟私有方法调用吗? public Class MyClass { private voi ...
- Scala控制抽象:将一段代码作为参数传递给高阶函数去执行
- mysql group 条件,mysql - mysql group by,两个条件,限制1 - SO中文参考 - www.soinside.com...
我想为所有门票选择最早的活动日期.我在mysql中创建了这个查询"tixdate"视图(我用于其他目的),它按票号排序记录,然后按eventdate排序.此视图如下所示: Even ...
最新文章
- 最简单的t-SNE上手使用
- 你真的了解javascript吗?(一)
- oracle SQL以结尾函数,Oracle学习笔记--SQL查询和SQL函数(转) -- 迷失de天空 -- 编程爱好者......
- java 实体 text字段,如何在Java中修剪对象的某些字段?
- CF401D Roman and Numbers
- shell脚本重启tomcat
- 【运营】盘点2014,有哪些O2O名牌被撕。
- 转【微信小程序 四】二维码生成/扫描二维码
- 把第三方jar包放入本地仓库
- Angular之Error: ExpressionChangedAfterItHasBeenChecked
- 有关启动图片Launch的设置
- Spark 系列(一)—— Spark 简介
- 深入解析:从源码窥探MySQL优化器
- RocketMQ的各种集群模式的搭建和消息可靠性保证和服务可用性描述
- Xcode增加头文件搜索路径的方法
- 详细分析GitLab CE 已遭在野利用漏洞 (CVE-2021-22205)
- ibm v7000配置文档_IBM_V7000底层结构及服务器数据恢复案例详解
- asp.net打开客户端bartender文件
- VS安装包注册com组件
- PLC十字路口交通灯设计
热门文章
- java db 10.4.13_Spring Data MongoDB 1.10.13和Mongo 3.4
- android gridview显示本地图片大小,在Android上的GridView中调整图像大小
- c 程序 实现一元二次方程
- 论文笔记 Traffic Data Reconstruction via Adaptive Spatial-Temporal Correlations
- MATLAB从入门到精通-新增返回数组高、宽数字特征的全新方式
- MATLAB从入门到精通-MATLAB零矩阵zeros()函数使用方法汇总
- 数学建模上分利器,小论文中稿神器,赶快学习近15年来较新颖的智能优化算法!
- 字节跳动 ClickHouse 在 A/B 实验和模型训练的使用
- python插件安装错误解决办法之SyntaxError: from __future__ imports must occur at the beginning of the file原因
- Python入门100题 | 第041题