Julia与其他语言的区别

Julia 与其他语⾔的区别

与其它语⾔的区别

与 MATLAB 的区别

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

数组⽤⽅括号来索引, A[i,j]数组是⽤引⽤来赋值的。在 A=B 之后,对 B 赋值也会修改 A使⽤引⽤来传递和赋值。如果⼀个函数修改了数组,调⽤函数会发现值也变了Matlab 把赋值和分配内存合并成了⼀个语句。⽐如: a(4) = 3.2 会创建⼀个数组 a = [0 0 0 3.2] ,即为a分配了内存并且将每个元素初始化为0,然后为第四个元素赋值3.2,⽽ a(5) = 7 会为数组a增加长度,并且给第五个元素赋值7。 Julia 把赋值和分配内存分开了: 如果 a 长度为4, a[5] = 7 会抛出⼀个错误。 Julia 有⼀个专⽤的 push! 函数来向 Vectors ⾥增加元素。并且远⽐Matlab的 a(end+1) = val 来的⾼效。虚数单位 sqrt(-1) ⽤ im 来表⽰字⾯上的数字如果没有⼩数点,则会被默认为整数类型⽽不是浮点类型。且⽀持任意长度的整数类型。但是这也意味着⼀些如2^-1的表达式因为不是正式⽽抛出⼀个异常。

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 关键字,⽽不是把它们列在函数定义中⼀个⽂件可以包含多个函数,⽂件被载⼊时,所有的函数定义都是外部可见的sum, prod, max 等约简操作,如果被调⽤时参数只有⼀个,作⽤域是数组的所有元素,如 sum(A)

sort 等函数,默认按列⽅向操作。( sort(A) 等价于 sort(A,1) )。要想排序 1xN 的矩阵,使⽤ sort(A,2)如果 A 是 2 维数组, fft(A) 计算的是 2 维 FFT. 尤其注意的是, 它不等效于fft(A,1), 后者计算的是按列的 1 维 FFT.

即使是⽆参数的函数,也要使⽤圆括号,如 tic() 和 toc()表达式结尾不要使⽤分号。表达式的结果不会⾃动显⽰(除⾮在交互式提⽰符下)。 println 函数可以⽤来打印值并换⾏若 A 和 B 是数组, A == B 并不返回布尔值数组。应该使⽤ A .== B 。其它布尔值运算符可以类⽐, , != 等

符号 & 、| 和 $ 表⽰位运算“和”、“或”以及“异或”。它们和python中的位运算符有着相同的运算符优先级,和c语⾔中的位运算符优先级并不⼀样。 它们能被应⽤在标量上或者应⽤在两个数组间(对每个相同位置的元素分别进⾏逻辑运算,返回⼀个由结果组成的新数组)。 值得注意的是它们的运算符优先级,别忘了括号: 如果想要判断变量 A 是等于1还是2, 要这样写 (A .== 1) | (A.== 2) 。

可以⽤ ... 把集合中的元素作为参数传递给函数,如 xs=[1,2]; f(xs...)Julia 中 svd 返回的奇异值是向量⽽不是完整的对⾓矩阵

Julia 中 ... 不⽤来将⼀⾏代码拆成多⾏。Instead, incomplete expressionsautomatically continue onto the next line.变量 ans 是交互式会话中执⾏的最后⼀条表达式的值;以其它⽅式执⾏的表达式的值,不会赋值给它Julia 的 type 类型和Matlab中的 classes ⾮常接近。Matlab 中的 structs ⾏为介于Julia 的 types 和 Dicts 之间。如果你想添加⼀个域在 strut 中,使⽤ Dict 会⽐type 好⼀些。

与 R 的区别

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

使⽤ = 赋值,不提供

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 包:

提供了概率分布函数.提供了数据框架提供了⼴义的线性模型.

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]

max和min等价于 R 语⾔中的pmax和pmin。但是所有的参数都应该有相同的维度。⽽且 maximum, minimum 可以替代 R 语⾔的 max and min ,这是最⼤的区别。函数 sum, prod, maximum, minimum和 R 语⾔中的同名函数并不相同。它们接收⼀个或者两个参数。第⼀个参数是集合,例如⼀个 array,如果有第⼆个参数,这个参数可以指明数据的维度,除此之外操作相似。⽐如,让 Julia 中的A=[[1 2],[3,4]] 和 R 中的 B=rbind(c(1,2),c(3,4))⽐较会是⼀个矩阵。 接着 sum(A) 和sum(B)会有相同的结果, 但是 sum(A,1) 是⼀个包含⼀列和的⾏向量,⽽ sum(A,2) 是⼀个包含⾏和的列向量. 如果第⼆个参数是向量,如 sum(A,[1,2])=10, 需要确保第⼆参数没有问题。

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 使⽤ -1Julia 中的 Comprehensions (还)没有条件 if 语句

for, if, while, 等块的结尾需要 end ;不强制要求缩进排版Julia 没有代码分⾏的语法:如果在⼀⾏的结尾,输⼊已经是个完整的表达式,就直接执⾏;否则就继续等待输⼊。强迫 Julia 的表达式分⾏的⽅法是⽤圆括号括起来

Julia 总是以列为主序的(类似 Fortran ),⽽ numpy 数组默认是以⾏为主序的(类似 C )。如果想优化遍历数组的性能,从 numpy 到 Julia 时应改变遍历的顺序。

W3Cschool(www.w3cschool.cn)最⼤的技术知识分享与学习平台

此篇内容来⾃于w3cschool.cn⽹站⽤户上传并发布。

Julia 与其他语⾔的区别

与其它语⾔的区别

与 MATLAB 的区别

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

数组⽤⽅括号来索引, A[i,j]数组是⽤引⽤来赋值的。在 A=B 之后,对 B 赋值也会修改 A使⽤引⽤来传递和赋值。如果⼀个函数修改了数组,调⽤函数会发现值也变了Matlab 把赋值和分配内存合并成了⼀个语句。⽐如: a(4) = 3.2 会创建⼀个数组 a = [0 0 0 3.2] ,即为a分配了内存并且将每个元素初始化为0,然后为第四个元素赋值3.2,⽽ a(5) = 7 会为数组a增加长度,并且给第五个元素赋值7。 Julia 把赋值和分配内存分开了: 如果 a 长度为4, a[5] = 7 会抛出⼀个错误。 Julia 有⼀个专⽤的 push! 函数来向 Vectors ⾥增加元素。并且远⽐Matlab的 a(end+1) = val 来的⾼效。虚数单位 sqrt(-1) ⽤ im 来表⽰字⾯上的数字如果没有⼩数点,则会被默认为整数类型⽽不是浮点类型。且⽀持任意长度的整数类型。但是这也意味着⼀些如2^-1的表达式因为不是正式⽽抛出⼀个异常。

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 关键字,⽽不是把它们列在函数定义中⼀个⽂件可以包含多个函数,⽂件被载⼊时,所有的函数定义都是外部可见的sum, prod, max 等约简操作,如果被调⽤时参数只有⼀个,作⽤域是数组的所有元素,如 sum(A)

sort 等函数,默认按列⽅向操作。( sort(A) 等价于 sort(A,1) )。要想排序 1xN 的矩阵,使⽤ sort(A,2)如果 A 是 2 维数组, fft(A) 计算的是 2 维 FFT. 尤其注意的是, 它不等效于fft(A,1), 后者计算的是按列的 1 维 FFT.

即使是⽆参数的函数,也要使⽤圆括号,如 tic() 和 toc()表达式结尾不要使⽤分号。表达式的结果不会⾃动显⽰(除⾮在交互式提⽰符下)。 println 函数可以⽤来打印值并换⾏若 A 和 B 是数组, A == B 并不返回布尔值数组。应该使⽤ A .== B 。其它布尔值运算符可以类⽐, , != 等

符号 & 、| 和 $ 表⽰位运算“和”、“或”以及“异或”。它们和python中的位运算符有着相同的运算符优先级,和c语⾔中的位运算符优先级并不⼀样。 它们能被应⽤在标量上或者应⽤在两个数组间(对每个相同位置的元素分别进⾏逻辑运算,返回⼀个由结果组成的新数组)。 值得注意的是它们的运算符优先级,别忘了括号: 如果想要判断变量 A 是等于1还是2, 要这样写 (A .== 1) | (A.== 2) 。

可以⽤ ... 把集合中的元素作为参数传递给函数,如 xs=[1,2]; f(xs...)Julia 中 svd 返回的奇异值是向量⽽不是完整的对⾓矩阵

Julia 中 ... 不⽤来将⼀⾏代码拆成多⾏。Instead, incomplete expressionsautomatically continue onto the next line.变量 ans 是交互式会话中执⾏的最后⼀条表达式的值;以其它⽅式执⾏的表达式的值,不会赋值给它Julia 的 type 类型和Matlab中的 classes ⾮常接近。Matlab 中的 structs ⾏为介于Julia 的 types 和 Dicts 之间。如果你想添加⼀个域在 strut 中,使⽤ Dict 会⽐type 好⼀些。

与 R 的区别

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

使⽤ = 赋值,不提供

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 包:

提供了概率分布函数.提供了数据框架提供了⼴义的线性模型.

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]

max和min等价于 R 语⾔中的pmax和pmin。但是所有的参数都应该有相同的维度。⽽且 maximum, minimum 可以替代 R 语⾔的 max and min ,这是最⼤的区别。函数 sum, prod, maximum, minimum和 R 语⾔中的同名函数并不相同。它们接收⼀个或者两个参数。第⼀个参数是集合,例如⼀个 array,如果有第⼆个参数,这个参数可以指明数据的维度,除此之外操作相似。⽐如,让 Julia 中的A=[[1 2],[3,4]] 和 R 中的 B=rbind(c(1,2),c(3,4))⽐较会是⼀个矩阵。 接着 sum(A) 和sum(B)会有相同的结果, 但是 sum(A,1) 是⼀个包含⼀列和的⾏向量,⽽ sum(A,2) 是⼀个包含⾏和的列向量. 如果第⼆个参数是向量,如 sum(A,[1,2])=10, 需要确保第⼆参数没有问题。

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 使⽤ -1Julia 中的 Comprehensions (还)没有条件 if 语句

for, if, while, 等块的结尾需要 end ;不强制要求缩进排版Julia 没有代码分⾏的语法:如果在⼀⾏的结尾,输⼊已经是个完整的表达式,就直接执⾏;否则就继续等待输⼊。强迫 Julia 的表达式分⾏的⽅法是⽤圆括号括起来

Julia 总是以列为主序的(类似 Fortran ),⽽ numpy 数组默认是以⾏为主序的(类似 C )。如果想优化遍历数组的性能,从 numpy 到 Julia 时应改变遍历的顺序。

W3Cschool(www.w3cschool.cn)最⼤的技术知识分享与学习平台

此篇内容来⾃于w3cschool.cn⽹站⽤户上传并发布。


相关文章

  • 最萌女汉子英语表达
  • 最萌女汉子,如何用英文表达? Photos of Julia Vins, a 17-year-old bodybuilder in Russia, became a hit online because of the strong cont ...查看


  • English英语快速入门
  • 般来说,衡量一个人口语水平高低主要看以下几个方面: 1语音.语调是否正确,口齿是否清楚: 2流利程度: 3语法是否正确,用词是否恰当,是否符合英语表达习惯: 4内容是否充实,逻辑是否清楚. 这些是衡量会话能力的主要标准.针对以上标准,采取相 ...查看


  • 中考英语真题分类专题七阅读理解判断正误型-课件
  • 判断正误型 [2015吉林] D It is school time again, a new start of a new period. You are, probably feeling excited and a little sa ...查看


  • 九年级上册英语翻译
  • 一.单项选择. ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ) 1. your father a brother? A. Is, have B. Do, has C. Does, have D. Does, has )2. ...查看


  • 浅谈美剧在大学英语口语教学中的运用
  • 摘 要:经济的全球化使得世界人们的交流日益频繁.英语作为一门世界语言在人们的交流中起着重要的桥梁作用.在面对面的交流中,口语的交流不可避免,虽然中国人经受了十多年的英语教育,但是在真正面对外国人的时候,大部分的英语学习者不能顺利地使用英语表 ...查看


  • 儿童英语分级阅读书
  • 儿童英语分级阅读 阅读,是开启知识大门的金钥匙.语言专家指出,幼儿的阅读越早开始越好. 现在的儿童英语读物实在是多,在儿童英语这个阵地上,有各种各样的分级读物.有的是电子的,有的是影印的,有国外引进的,有国内创作的. 为了学好英语,还是要用 ...查看


  • 新目标七年级下册英语教案
  • 新目标七年级下册英语教案:Unit 3 Why do you like koalas? 一.教学内容分析 本单元是Go for it七年级上册中第八单元"When is your birthday?".单元的核心话题是谈 ...查看


  • Join in 三年级下册课本听力录音稿
  • Join in 三年级下册课本听力录音稿 第5页4 1. What 's your name? 2. What time is it? 3. What's this? I 'm Bob. It 's two. My guitar. 4. W ...查看


  • 集便器中间人王兴
  • 本文来源于财新<新世纪> 2011年第49期 出版日期2011年12月19日 张曙光妻子王兴,是中国集便器市场呼风唤雨但从未走到前台的神秘人物 财新<新世纪>记者 王晨 发自北京.青岛.济南.福州 特派记者 章涛 发 ...查看


热门内容