http://site.douban.com/146782/widget/notes/15468638/note/356127615/

 


        上午等着R跑数,R是出了名的慢,特别是处理文本时。无聊中,刷了一遍微博,惊现R界的扫地僧(谢益辉语)宫雨放出了RJulia。GitHub地址在此,https://github.com/armgong/RJulia,各位看官可以观赏了。
        很欣赏Julia以及维护Julia的那帮同志们,但用者实在过少,包也少得可怜,不过现在总算看到一点希望。
        讲这么多,Julia到底是干嘛的,首先Julia是一门编程语言,偏数学的编程语言。大家看我把Julia、python、R、matlab的图标放一起;以及如果大家查看其官方wiki时,看到它与其他三种比较时,你就知道这货是干什么用的。
        对于Julia本身我就不多作介绍,有兴趣的自然会去了解(恐怕有兴趣的不会多),我这里贴一个《程序员》对Julia四位发明者的访谈 http://www.csdn.net/article/2014-03-12/2818732/1
        还是简单说一下,交待一下背景,Julia脱胎于MATLAB,类似于R脱胎于S-PLUS,语言风格集成了C、python、ruby、perl,当然少不了MATLAB(是不是挺像编程语言界的五仁月饼,跟swift有得一比),我自己感觉确实挺简单易用。Julia的发明者都是资深的MATLAB使用者,所以,你知道。。。。。。
        Julia最大的卖点就是处理速度,作为一门动态语言,它几乎具备跟静态语言,如C语言一般的效率,在这一点上它甩出R得有N条街,下图是官网贴出的测试结果:

 

好像说到这里我还没说Julia是干嘛的,科学计算,这是它的第一任务;与winpython平台类似。

好了,到这了也该真正比较以下这几个平台(比较内容非原创)

与 MATLAB 的区别

Julia 的语法和 MATLAB 很像。但 Julia 不是简单地复制 MATLAB ,它们有很多句法和功能上的区别。以下是一些值得注意的区别:

数组用方括号来索引, A[i,j]
    数组是用引用来赋值的。在 A=B 之后,对 B 赋值也会修改 A
    使用引用来传递和赋值。如果一个函数修改了数组,调用函数会发现值也变了
    Matlab combines allocation and assignment into single statements, e.g., a(4) = 3.2 creates the array a = [0 0 0 3.2] and a(5) = 7 grows it. Julia separates allocation and assignment: if a is of length 4, a[5] = 7 yields an error. Julia has a push! function which grows Vectors much more efficiently than Matlab’s a(end+1) = val.
    虚数单位 sqrt(-1) 用 im 来表示
    多返回值和多重赋值需要使用圆括号,如 return (a, b) 和 (a, b) = f(x)
    Julia 有一维数组。列向量的长度为 N ,而不是 Nx1 。例如, rand(N) 生成的是一维数组
    使用语法 [x,y,z] 来连接标量或数组,连接发生在第一维度(“垂直”)上。对于第二维度(“水平”)上的连接,需要使用空格,如 [x y z] 。 要想构造块矩阵,尽量使用语法 [a b; c d]
    a:b 和 a:b:c 中的冒号,用来构造 Range 对象。使用 linspace 构造一个满向量,或者通过使用方括号来“连接”范围,如 [a:b]
    函数返回须使用 return 关键字,而不是把它们列在函数定义中(详见 return 关键字 )
    一个文件可以包含多个函数,文件被载入时,所有的函数定义都是外部可见的
    sum, prod, max 等约简操作,如果被调用时参数只有一个,作用域是数组的所有元素,如 sum(A)
    sort 等函数,默认按列方向操作。( sort(A) 等价于 sort(A,1) )。要想排序 1xN 的矩阵,使用 sort(A,2)
    即使是无参数的函数,也要使用圆括号,如 tic() 和 toc()
    表达式结尾不要使用分号。表达式的结果不会自动显示(除非在交互式提示符下)。 println 函数可以用来打印值并换行
    若 A 和 B 是数组, A == B 并不返回布尔值数组。应该使用 A .== B 。其它布尔值运算符可以类比, <, >, != 等
    The operators &, |, and $ perform the bitwise operations and, or, and xor, respectively, and have precedence similar to Python’s bitwise operators (not like C). They can operate on scalars or elementwise across arrays and can be used to combine logical arrays, but note the difference in order of operations—parentheses may be required (e.g., to select elements of A equal to 1 or 2 use (A .== 1) | (A .== 2)).
    可以用 ... 把集合中的元素作为参数传递给函数,如 xs=[1,2]; f(xs...)
    Julia 中 svd 返回的奇异值是向量而不是完整的对角矩阵
    Julia 中 ... 不用来将一行代码拆成多行
    变量 ans 是交互式会话中执行的最后一条表达式的值;以其它方式执行的表达式的值,不会赋值给它
    The closest analog to Julia’s types are Matlab’s classes. Matlab’s structs behave somewhere between Julia’s types and Dicts; in particular, if you need to be able to add fields to a struct on-the-fly, use a Dict rather than a type.

与 R 的区别

Julia 也想成为数据分析和统计编程的高效语言。与 R 的区别:

使用 = 赋值,不提供 <- 或 <<- 等箭头式运算符

用方括号构造向量。Julia 中 [1, 2, 3] 等价于 R 中的 c(1, 2, 3)

Julia 的矩阵运算比 R 更接近传统数学语言。如果 A 和 B 是矩阵,那么矩阵乘法在 Julia 中为 A * B , R 中为 A %*% B 。在 R 中,第一个语句表示的是逐元素的 Hadamard 乘法。要进行逐元素点乘,Julia 中为 A .* B

使用 ' 运算符做矩阵转置。 Julia 中 A' 等价于 R 中 t(A)

写 if 语句或 for 循环时不需要写圆括号:应写 for i in [1, 2, 3] 而不是 for (i in c(1, 2, 3)) ;应写 if i == 1 而不是 if (i == 1)

0 和 1 不是布尔值。不能写 if (1) ,因为 if 语句仅接受布尔值作为参数。应写成 if true

不提供 nrow 和 ncol 。应该使用 size(M, 1) 替代 nrow(M) ;使用 size(M, 2) 替代 ncol(M)

Julia 的 SVD 默认为非 thinned ,与 R 不同。要得到与 R 一样的结果,应该对矩阵 X 调用 svd(X, true)

Julia 区分标量、向量和矩阵。在 R 中, 1 和 c(1) 是一样的。在 Julia 中,它们完全不同。例如若 x 和 y 为向量,则 x' * y 是一个单元素向量,而不是标量。要得到标量,应使用 dot(x, y)

Julia 中的 diag() 和 diagm() 与 R 中的不同

Julia 不能在赋值语句左侧调用函数:不能写 diag(M) = ones(n)

Julia 不赞成把 main 命名空间塞满函数。大多数统计学函数可以在 扩展包 中找到,比如 DataFrames 和 Distributions 包:
            Distributions 包 提供了概率分布函数
            DataFrames 包 提供了数据框架
            GLM 公式必须要转义:使用 :(y ~ x) ,而不是 y ~ x

Julia 提供了多元组和哈希表,但不提供 R 的列表。当返回多项时,应该使用多元组:不要使用 list(a = 1, b = 2) ,应该使用 (1, 2)

鼓励自定义类型。Julia 的类型比 R 中的 S3 或 S4 对象简单。Julia 的重载系统使 table(x::TypeA) 和 table(x::TypeB) 等价于 R 中的 table.TypeA(x) 和 table.TypeB(x)

在 Julia 中,传递值和赋值是靠引用。如果一个函数修改了数组,调用函数会发现值也变了。这与 R 非常不同,这使得在大数据结构上进行新函数操作非常高效

使用 hcat 和 vcat 来连接向量和矩阵,而不是 c, rbind 和 cbind

Julia 的范围对象如 a:b 与 R 中的定义向量的符号不同。它是一个特殊的对象,用于低内存开销的迭代。要把范围对象转换为向量,应该用方括号把范围对象括起来 [a:b]

Julia 有许多函数可以修改它们的参数。例如, sort(v) 和 sort!(v) 函数中,带感叹号的可以修改 v

colMeans() 和 rowMeans(), size(m, 1) 和 size(m, 2)

在 R 中,需要向量化代码来提高性能。在 Julia 中与之相反:使用非向量化的循环通常效率最高

与 R 不同,Julia 中没有延时求值

不提供 NULL 类型

Julia 中没有与 R 的 assign 或 get 所等价的语句

与 Python 的区别

对数组、字符串等索引。Julia 索引的下标是从 1 开始,而不是从 0 开始
    索引列表和数组的最后一个元素时,Julia 使用 end ,Python 使用 -1
    Julia 中的 Comprehensions (还)没有条件 if 语句
    for, if, while, 等块的结尾需要 end ;不强制要求缩进排版
    Julia 没有代码分行的语法:如果在一行的结尾,输入已经是个完整的表达式,就直接执行;否则就继续等待输入。强迫 Julia 的表达式分行的方法是用圆括号括起来
    Julia 总是以列为主序的(类似 Fortran ),而 numpy 数组默认是以行为主序的(类似 C )。如果想优化遍历数组的性能,从 numpy 到 Julia 时应改变遍历的顺序。

下面又要回到我自己说的话了。Julia对文本处理的能力应该不被质疑的,但扩展包少得可怜,拿得出手的也就是TextAnalysis模块了,以下是该包的outline:

Installation
    Getting Started
    Creating Documents
        StringDocument
        FileDocument
        TokenDocument
        NGramDocument
    Basic Functions for Working with Documents
        text
        tokens
        ngrams
    Document Metadata
        language
        name
        author
        timestamp
    Preprocessing Documents
        Removing Corrupt UTF8
        Removing Punctuation
        Removing Case Distinctions
        Removing Words
            Stop Words
            Articles
            Indefinite Articles
            Definite Articles
            Prepositions
            Pronouns
        Stemming
        Removing Rare Words
        Removing Sparse Words
    Creating a Corpus
    Processing a Corpus
    Corpus Statistics
        Lexicon
        Inverse Index
    Creating a Document Term Matrix
    Creating Individual Rows of a Document Term Matrix
    The Hash Trick
        Hashed DTV's
        Hashed DTM's
    TF-IDF
    LSA: Latent Semantic Analysis
    LDA: Latent Dirichlet Allocation
    Extended Usage Example: Analyzing the State of the Union Addresses

基本上传统的NLP功能都有囊括,不过相对于python的nltk来说,那就是小巫见大巫了。不过我现在能做的事情也就是看好了。吃螃蟹的代价太大,在时间成本还不是很高的情况下,python和R还是首选。对了,该包的GitHub地址是https://github.com/johnmyleswhite/TextAnalysis.jl

Julia与R/Python/MATLAB比较及Julia中的Text Analysis模块相关推荐

  1. 统计语言类教程:R语言贝叶斯统计学、Copula、SEM、极值统计学、混合效应模型、R\Python\matlab机器学习、科研数据可视化、线性回归、分位数回归、GAMS、meta分析、近红外光谱等.

    查看原文>>>统计语言类教程:贝叶斯统计学.Copula.SEM.极值统计学.混合效应模型.PyTorch深度学习.科研数据可视化 以下给大家整理了一些常用的统计学内容和python ...

  2. 使用python处理wps表格_python中常⽤的excel模块库

    python中常用的excel模块库&安装方法 openpyxlopenpyxl是⼀个Python库,用于读取/写⼊Excel 2010 xlsx / xlsm / xltx / xltm⽂件 ...

  3. matlab标题斜体_Matlab中下标,斜体,及希腊字母的使用方法

    下面是Matlab官方列出来的Tex代码列表,包含了绝大部分的希腊字母和数学符号. Character Sequence Symbol Character Sequence Symbol Charac ...

  4. matlab 摄氏度符号怎么打,【求助】弱弱的问下,Matlab如何在公式中输入希腊字母? - 程序语言 - 小木虫 - 学术 科研 互动社区...

    很多时候都要在matlab画图的时候添加一些公式符号之类的,有一些特殊的字符并不能直接从键盘上输入,比如希腊字母等等.但是有想用,因为这样使图看起来漂亮而且容易理解. 例如:我想输入摄氏度的符号,怎么 ...

  5. Python中的urllib.request模块

    版权声明:本文为Jurbo原创文章,转载请加上链接和作者名,标明出处. https://blog.csdn.net/Jurbo/article/details/52313636 因为在玩Python ...

  6. loss下降auc下降_梯度下降算法 线性回归拟合(附Python/Matlab/Julia源代码)

    梯度下降 梯度下降法的原理 梯度下降法(gradient descent)是一种常用的一阶(first-order)优化方法,是求解无约束优化问题最简单.最经典的方法之一. 梯度下降最典型的例子就是从 ...

  7. 【Python、C++、R 三合一效果好】Julia 重磅发布,全球热度上升最快

    IT派助力深广创业,免费代发招聘信息,了解一下? 近年来,Julia 语言已然成为编程界的新宠.这门由 MIT CSAIL 实验室开发的编程语言结合了 C 语言的速度.Ruby 的灵活.Python ...

  8. 技术▍Julia 解决了 C++/Python/Matlab 的哪些痛点?

    图为使用Julia画出来的图 本文作者|罗秀哲  编辑|布袋熊  36大数据获授权发布 机器学习 高性能 GPU 计算的编程语言 昨天我们推送一篇关于"Julia"的文章:< ...

  9. python julia go_挑战Python的四个语言:Swift、Go、Julia、R

    没什么是永恒的--包括编程语言.很多看起来可能是将来的佼佼者,到头来可能被人们遗忘.无论是因为不可抗拒的原因,还是因为自身发展的原因. Python时下正在"最热门的编程语言榜"上 ...

最新文章

  1. 如何构建可视化的营销数据大屏?
  2. matlab与钻井平台,基于MATLAB环境下采用C8051F060实现钻井井眼姿态监测系统的设计...
  3. 学习Spring(六) -- Spring中Bean的作用域以及生命周期
  4. java filter
  5. python 对象转dict_如何将python dict对象转换为java等效对象?
  6. ios fixed定位后内容不显示_记录CSS中 position:fixed 踩的坑
  7. Linux NTP时间服务器搭建
  8. Thinkpad 笔记本VMware Workstation 安装虚拟机出现“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”解决方法
  9. 十三、K8s SVC相关操作
  10. 前端UI框架网址大全----后续会有添加
  11. Top100图神经网络论文大盘点
  12. VMwareESX常用命令和IP地址修改
  13. layui 表格加载动画_巴州动画
  14. web前端需要学习什么?
  15. 配置局域网内电脑快速传输数据
  16. C# 获取Windows系统ICON图标的四种方式-可提取各种文件夹、文件等等图标
  17. 运用html画一个三角形,利用css或html5画出一个三角形的方法
  18. 格式工厂转码错误原因0x000000001 怎么办
  19. Multisim 设计任务
  20. Spring-02 IOC与DI

热门文章

  1. 关于工程技术中PE、ME、TE、IE、EE的解说
  2. 实现本机拷贝带进度的方法
  3. 多线程编程的一点小心得(1)
  4. yan-round-sysuser的pom.xml文件
  5. 正则基础之 NFA引擎匹配原理
  6. EJB3.0 JPQL
  7. c语言五子棋排行榜代码,C语言案例:控制台版本的五子棋游戏【代码】
  8. 网络爬虫终篇:向10万级网易云用户发送定向消息
  9. 深度学习之自编码器(2)Fashion MNIST图片重建实战
  10. 奥托尼克斯接近开关型号_萨科微SLKOR的MOS 场效应管应用范围和型号