Julia: map、匿名函数和“差之毫厘,谬之千里”
一、map的方便之处
比如,进行矩阵(更准确是向量)计算,如果函数内参数没有写矩阵格式(::Array{}),只写了(比如:::Float64),这时用map可以很方便得到矩阵返回值,不需要写循还。
比如,我写了一个getDateTime(dt::ASCIIString)函数(返回值为Dates.DateTime),如果要对["2014-1-15", "2014-1-16"]进行运算,
julia> map(getDateTime,["2014-1-15", "2014-1-16"]);
注:不过,暂时只发现了可以进行向量式计算,矩阵在这里也会转成向量的。
二、匿名函数
和C#等一样,如果你在Julia中,如果是一个简单的函数,你又不想写一个函数,便可以用匿名函数了。
julia> map(x->x^2+sin(x), [1,2,3,4,5]); # 单参数
julia>map((x,y)->sin(x+y^2), [1,2] , [5,10]) # 多参数
julia>map((x,y)->(x+y^2+3*y),[1,2] , [5,10]) # 更复杂一点的格式
如果某函数稍复杂一些,可以先把函数简化一下:
简化方法:
fun(x,y)=x+y^3+3*y+5*x^2+sin(x-2*y)+cos(y-x/2) # 写一个简化的函数,省得写function fun(x,y)......end 格式
再
julia>map((x,y)->fun(x,y),[1,2],[5,10]) # 这样更优雅一些。
但,没办法写成:
julia>map(fun,[1,2],[5,10]) # 不能这么写,Julia会报错!
还比如,我有一个自定义的类型,kbarData,里面有 Open,Close,High,Low....等字段,如何取得Close的序列
julia> map(bar->bar.Close,data); #data:Array{kbarData,1}
注意不能,map(bar.Close,data)
从上面可以看到,Julia的确做到了优雅!赞!
三、三种“差之毫厘,谬之千里”的格式
事实上,map(x->x^2+sin(x), [1,2,3,4,5]);也有其它的写法,功能差不多。
(1)julia>data =[x^2+sin(x) for x in [1,2,3,4,5]] # typeof(data) 为Array{Float64,1}. 这个和map()效果完全一样。
其中, julia>data =[sin(x+y^2) for x in [1,2] , y in [5,10]] # 多参数格式
(2)julia>data ={x^2+sin(x) for x in [1,2,3,4,5]} #不过返回的类型为:Array{Any,1},只能说实际效果相当,略有区别了。
比如,以下是我在一个函数中用到的代码:
# 日期 时间 今开 最高 最低 收盘 成交量 成交金额
CodeInTable =repmat([code],row,1)
dt =map((x,y)->getDateTime(string(x," ",y)), data[:,1],data[:,2]) # 原格式: 2014/1/5 9:31:00
TradeDay = [Dates.year(x)*10000+Dates.month(x)*100+Dates.day(x) for x in dt]
TradeTime =[Dates.hour(x)*10000+Dates.minute(x)*100+Dates.second(x) for x in dt]
如果是写循还,那代码的体格可能要上升N倍。但需要注意,这种写法可能会导致性能会下降。
同样,对于kbarData类型,
map(x->x.Close,data) 可以写成 :[bar.Close for bar in data]
但要注意,如下写成下面的格式,可能情况就另当别论了。
(1)注意:写成以下格式,返回值为一个函数Array了
julia>data =[x^2+sin(x) for x in [1,2,3,4,5]]
(2)还需注意,写成以下格式,返回值变成一个Dict()
julia>data =[x=>x^2+sin(x) for x in [1,2,3,4,5]]
四、关于速度
在Julia中,匿名函数(带"->",不带的不算匿名函数,特此说明。)因为速度相对较慢,是不推荐的。其实,我们也可以从下面的比较可以得到。
以sin(x)为例:
map(sin,data) 远优于map(x->sin(x),data); # 我机器上测效率差13倍
而:
map(x->sin(x),data) 要优于[sin(x) for x in data]. #我机器上测,效率差1倍
但一个基本简单的原则是,所有的这些“优雅”都是有代价的,如果要追单最好的速度,还是请用循还吧。这也许就是大道至简吧。
这里面,最值得推荐的还是map()非匿名的写法,又优雅,速度又快!
这所谓,“差之毫厘,谬之千里”!信不信由你。
Julia: map、匿名函数和“差之毫厘,谬之千里”相关推荐
- 匿名函数自我调用_Python中的匿名函数及递归思想简析
匿名函数 前言 上次咱们基本说了一下函数的定义及简单使用,Python中的基本函数及其常用用法简析,现在咱们整点进阶一些的.同样都是小白,咱也不知道实际需要不,但是对于函数的执行顺序以及装饰器的理解还 ...
- 复习 Python 匿名函数 内建函数
lamba 补充: 如图: 举例: 上例中的reduce用法: 内建函数 如图,有137的函数.类等等 类的单词首字母是大写的 查看函数或者类的方法: 常用的内建函数: 1.返回数字的绝对值 查看内置 ...
- Python中的匿名函数及递归思想简析
匿名函数 前言 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. 那么针对这三类 ...
- python在匿名函数作和_python之路——内置函数和匿名函数
阅读目录 楔子 在讲新知识之前,我们先来复习复习函数的基础知识. 问:函数怎么调用? 函数名() 如果你们这么说...那你们就对了!好了记住这个事儿别给忘记了,咱们继续谈下一话题... 来你们在自己的 ...
- 【python】匿名函数与装饰器
1. 匿名函数 语法:lambda [arg1 [,arg2,.......argn]]:expression注意点:arg1:参数名,可以带多个,参数名之间都逗号隔开expression : 表达式 ...
- python - - 函数 - - 内置函数和匿名函数
目录 内置函数 匿名函数 本章小结 相关练习题 1,内置函数 python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数. Built-inFuncti ...
- mysql eva结构,内置函数和匿名函数(摘自Eva_J女神)
阅读目录 楔子 在讲新知识之前,我们先来复习复习函数的基础知识. 问:函数怎么调用? 函数名() 如果你们这么说...那你们就对了!好了记住这个事儿别给忘记了,咱们继续谈下一话题... 来你们在自己的 ...
- Python中匿名函数及递归思想简析(小本本记下来)
前言: 上次咱们基本说了一下函数的定义及简单使用,想要了解的伙伴可以去看看.Python中最基本的函数及其常用用法简析(新手必备)小本本记起来 现在咱们整点进阶一些的.同样都是小白,咱也不知道实际需要 ...
- python匿名函数的作用_Python中的匿名函数及递归思想简析
匿名函数 前言 上次咱们基本说了一下函数的定义及简单使用,Python中的基本函数及其常用用法简析,现在咱们整点进阶一些的.同样都是小白,咱也不知道实际需要不,但是对于函数的执行顺序以及装饰器的理解还 ...
- Python day10 global关键字、函数递归、匿名函数、map函数的用法详解
1.global关键字 引用全局变量,在局部全局变量改变,也会改变,global相当于指针,将地址指向全局变量的name name='littlepage'def littepage():global ...
最新文章
- 第八章 Health Check
- 10大负面测试用例 -转
- jsp中通过多种方式实现面包屑导航
- Java集合--TreeMap
- 论文浅尝 | Multimodal Few-Shot Learning with Frozen Language Models
- 【Photoshop】滤镜详解
- Ubuntu20.04安装C++版Opencv4
- Tensorflow-GPU使用时笔记本电脑声音过大的问题
- OpenGL ES EGL eglDestroyContext
- [F2F] MyBatis相关面试题
- 江苏大学京江学院计算机怎么样,江苏大学京江学院是几本 学生评价怎么样好不好(10条)...
- 优秀景区小程序开发案例赏析
- 揭开腾讯云原生同城双活的秘密
- mysql oder by 注入_Order by排序注入方法小总结
- 高分系列卫星介绍(GF)
- React-缩略图组件使用
- vue admin template 侧边栏及顶部栏演示字体样式修改
- Cubox是什么应用?如何将Cubox同步至Notion、语雀、在线文档中
- 论文算法学习实现(5):动态障碍物的检测和剔除2
- 实现Java对象交给Spring容器管理(定义和调用)
热门文章
- Jquery 数组操作(转)
- 解决 vim 中文编码问题
- 通过python和websocket构建实时通信系统[扩展saltstack监控]
- 章节十一、1-Junit介绍
- ubuntu 安装cuda 成功
- JAVA 表格组件 + rs.beforeFirst()使用
- Cogs 647. [Youdao2010] 有道搜索框(Trie树)
- 第一个Net+Mysql的例子,比想象的简单很多
- ireport +jasperreport 中文不能显示
- Linux下的防火墙