一、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、匿名函数和“差之毫厘,谬之千里”相关推荐

  1. 匿名函数自我调用_Python中的匿名函数及递归思想简析

    匿名函数 前言 上次咱们基本说了一下函数的定义及简单使用,Python中的基本函数及其常用用法简析,现在咱们整点进阶一些的.同样都是小白,咱也不知道实际需要不,但是对于函数的执行顺序以及装饰器的理解还 ...

  2. 复习 Python 匿名函数 内建函数

    lamba 补充: 如图: 举例: 上例中的reduce用法: 内建函数 如图,有137的函数.类等等 类的单词首字母是大写的 查看函数或者类的方法: 常用的内建函数: 1.返回数字的绝对值 查看内置 ...

  3. Python中的匿名函数及递归思想简析

    匿名函数 前言 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. 那么针对这三类 ...

  4. python在匿名函数作和_python之路——内置函数和匿名函数

    阅读目录 楔子 在讲新知识之前,我们先来复习复习函数的基础知识. 问:函数怎么调用? 函数名() 如果你们这么说...那你们就对了!好了记住这个事儿别给忘记了,咱们继续谈下一话题... 来你们在自己的 ...

  5. 【python】匿名函数与装饰器

    1. 匿名函数 语法:lambda [arg1 [,arg2,.......argn]]:expression注意点:arg1:参数名,可以带多个,参数名之间都逗号隔开expression : 表达式 ...

  6. python - - 函数 - - 内置函数和匿名函数

    目录 内置函数 匿名函数 本章小结 相关练习题 1,内置函数 python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数. Built-inFuncti ...

  7. mysql eva结构,内置函数和匿名函数(摘自Eva_J女神)

    阅读目录 楔子 在讲新知识之前,我们先来复习复习函数的基础知识. 问:函数怎么调用? 函数名() 如果你们这么说...那你们就对了!好了记住这个事儿别给忘记了,咱们继续谈下一话题... 来你们在自己的 ...

  8. Python中匿名函数及递归思想简析(小本本记下来)

    前言: 上次咱们基本说了一下函数的定义及简单使用,想要了解的伙伴可以去看看.Python中最基本的函数及其常用用法简析(新手必备)小本本记起来 现在咱们整点进阶一些的.同样都是小白,咱也不知道实际需要 ...

  9. python匿名函数的作用_Python中的匿名函数及递归思想简析

    匿名函数 前言 上次咱们基本说了一下函数的定义及简单使用,Python中的基本函数及其常用用法简析,现在咱们整点进阶一些的.同样都是小白,咱也不知道实际需要不,但是对于函数的执行顺序以及装饰器的理解还 ...

  10. Python day10 global关键字、函数递归、匿名函数、map函数的用法详解

    1.global关键字 引用全局变量,在局部全局变量改变,也会改变,global相当于指针,将地址指向全局变量的name name='littlepage'def littepage():global ...

最新文章

  1. 第八章 Health Check
  2. 10大负面测试用例 -转
  3. jsp中通过多种方式实现面包屑导航
  4. Java集合--TreeMap
  5. 论文浅尝 | Multimodal Few-Shot Learning with Frozen Language Models
  6. 【Photoshop】滤镜详解
  7. Ubuntu20.04安装C++版Opencv4
  8. Tensorflow-GPU使用时笔记本电脑声音过大的问题
  9. OpenGL ES EGL eglDestroyContext
  10. [F2F] MyBatis相关面试题
  11. 江苏大学京江学院计算机怎么样,江苏大学京江学院是几本 学生评价怎么样好不好(10条)...
  12. 优秀景区小程序开发案例赏析
  13. 揭开腾讯云原生同城双活的秘密
  14. mysql oder by 注入_Order by排序注入方法小总结
  15. 高分系列卫星介绍(GF)
  16. React-缩略图组件使用
  17. vue admin template 侧边栏及顶部栏演示字体样式修改
  18. Cubox是什么应用?如何将Cubox同步至Notion、语雀、在线文档中
  19. 论文算法学习实现(5):动态障碍物的检测和剔除2
  20. 实现Java对象交给Spring容器管理(定义和调用)

热门文章

  1. Jquery 数组操作(转)
  2. 解决 vim 中文编码问题
  3. 通过python和websocket构建实时通信系统[扩展saltstack监控]
  4. 章节十一、1-Junit介绍
  5. ubuntu 安装cuda 成功
  6. JAVA 表格组件 + rs.beforeFirst()使用
  7. Cogs 647. [Youdao2010] 有道搜索框(Trie树)
  8. 第一个Net+Mysql的例子,比想象的简单很多
  9. ireport +jasperreport 中文不能显示
  10. Linux下的防火墙