美文网首页JuliaJulia语言
Julia中的数学运算2

Julia中的数学运算2

作者: Julia语言 | 来源:发表于2018-09-03 07:17 被阅读82次

欢迎关注Julia语言微信公众账号 julia_language

原文链接:http://suo.im/57CnEx

微信公众号:Julia语言
每周一三五更新Julia语言
每周二四六更新Python进阶

矢量化的点运算符

对于像这样的运算符,都有一个相应的“点”运算。自动定义为在数组上逐个元素执行。 例如,[1,2,3] ^ 3没有定义,因为“三次方”数组没有标准的数学意义,但是[1,2,3].^ 3被定义为计算 元素(或“矢量化”)结果[1 ^ 3,2 ^ 3,3 ^ 3]。 同样对于一元运算符来说,有一个相应的点运算符.√适用于列表中的各个元素。

julia> [1,2,3] .^ 3
3-element Array{Int64,1}:
  1
  8
 27
julia> .√[1,81,49,101]
4-element Array{Float64,1}:
  1.0
  9.0
  7.0
 10.04987562112089

点语法也可以应用于自定义算子。例如,定义了一个Kronecker积(A ⊗ B), ⊗(A,B) = kron(A,B) ,那么[A,B] .⊗ [C,D]就会被解析为[A⊗C, B⊗D],无需额外的代码。

下面的语法是不被允许的,因为有歧义。

1.+x可以理解为以下两种情况:

  • 1. + x
  • 1 .+ x
√怎么打?

左手按住换档键([Alt键]不放,右手依次按41420(不要按键盘上方的,要按右边的),松开双手,根号(√)就出来了

数值比较

所有的基础数值类型都可以使用比较运算符:


数值比较运算符.png
julia> 1 == 1
true

julia> 1 == 2
false

julia> 1 != 2
true

julia> 1 == 1.0
true

julia> 1 < 2
true

julia> 1.0 > 3
false

julia> 1 >= 1.0
true

julia> -1 <= 1
true

julia> -1 <= -1
true

julia> -1 <= -2
false

julia> 3 < -0.5
false

整数是按位比较的。浮点数是 IEEE 754 标准 比较的:

  • 有限数按照正常方式做比较。
  • 正数的零等于但不大于负数的零。
  • Inf 等于它本身,并且大于所有数, 除了 NaN
  • -Inf 等于它本身,并且小于所有数, 除了 NaN
  • NaN 不等于、不大于、不小于任何数,包括它本身。

上面最后一条是关于 NaN 的性质,值得留意:

julia> NaN == NaN
false

julia> NaN != NaN
true

julia> NaN < NaN
false

julia> NaN > NaN
false

NaN 在矩阵中使用时会带来些麻烦:

julia> [1 NaN] == [1 NaN]
false

Julia 提供了附加函数, 用以测试这些特殊值,它们使用哈希值来比较:


functions to test numbers for special values.png

isequal 函数,认为 NaN 等于它本身:

julia> isequal(NaN, NaN)
true

julia> isequal([1 NaN], [1 NaN])
true

julia> isequal(NaN, NaN32)
true

isequal也可以用来区分有符号的零:

julia> -0.0 == 0.0
true

julia> isequal(-0.0, 0.0)
false

有符号整数,无符号整数和浮点数之间的混合类型比较可能很棘手。 我们已经采取了很多措施来确保Julia正确地做到这一点。

对于其他类型,isequal默认调用==,因此如果要为自己的类型定义相等性,则只需添加==方法。 如果定义自己的相等函数,则应该定义相应的哈希方法,以确保isequal(x, y)表示hash(x)== hash(y)

链式比较

与大多数语言不同,Julia 支持 Python链式比较 :

julia> 1 < 2 <= 2 < 3 == 3 > 2 >= 1 == 1 < 3 != 5
true
备注

效果上等同于(1 < 2) && (2 <= 2) && (2 < 3) && (3 == 3) && (3 > 2) && (2 >= 1) && (1 == 1) && (1 < 3) && (3 != 5)

对标量的比较,链式比较使用 && 运算符;对逐元素的比较使用 & 运算符,此运算符也可用于数组。例如,0 .< A .< 1 的结果是一个对应的布尔数组,满足条件的元素返回 true

注意链式比较的比较顺序:

julia> v(x) = (println(x); x)
v (generic function with 1 method)

julia> v(1) < v(2) <= v(3)
2
1
3
true

julia> v(1) > v(2) <= v(3)
2
1
false

中间的值只计算了一次,而不是像 v(1) < v(2) && v(2) <= v(3) 一样计算了两次。但是,链式比较的计算顺序是不确定的。不要在链式比较中使用带副作用(比如打印)的表达式。如果需要使用副作用表达式,推荐使用短路&&运算符。

备注

v(1) < v(2) <= v(3)效果上等同于v(1) < v(2) && v(2) <= v(3),具体的计算步骤为:

  1. 执行v(2),输出2
  2. 执行v(1),输出1
  3. 比较v(1) < v(2),为true
  4. 执行v(3),输出3
  5. 比较v(2) <= v(3),为true
  6. 最后true && true,结果为true

同理v(1) > v(2) <= v(3))效果上等同于v(1) > v(2) && v(2) <= v(3),具体的计算步骤为:

  1. 执行v(2),输出2
  2. 执行v(1),输出1
  3. 比较v(1) > v(2),为false
  4. 现在原式就等同于false && v(2) <= v(3),因为已经有了一个false,且是&&运算符,无需再比较后面的,结果就为false

初等函数

Julia提供全面的数学函数和运算符集合。 这些数学运算在广义的一类数值上定义为允许合理的定义,包括整数,浮点数,有理数和复数,只要这些定义有意义。

此外,这些函数可以以“矢量化”的方式应用于具有点语法f.(A)的数组和其他集合,例如, sin.(A)将计算数组A的每个元素的正弦值。

运算优先级和结合性

Julia 运算优先级从高至低依次为:


运算优先级和结合性.png

一元运算符+-需要围绕其参数的显式括号来消除它们与运算符++等的歧义。一元运算符的其他组合被解析为具有右关联性,例如。 例如,√√-a√(√(-a))

运算符+++*是非关联的。 a + b + c被解析为+(a, b, c)而不是+(+(a, b), c)。 但是,+(a, b, c, d ...)*(a, b, c, d...)的回退方法都默认为左关联。

有关每个Julia运算符优先级的完整列表,请参阅此文件src / julia-parser.scm

您还可以通过内置函数Base.operator_precedence找到任何给定运算符的数字优先级,其中较高的数字优先:

julia> Base.operator_precedence(:+), Base.operator_precedence(:*), Base.operator_precedence(:.)
(11, 13, 17)

julia> Base.operator_precedence(:sin), Base.operator_precedence(:+=), Base.operator_precedence(:(=))  # (Note the necessary parens on `:(=)`)
(0, 1, 1)

通过调用内置函数Base.operator_associativity,也可以找到表示运算符关联性的符号:

julia> Base.operator_associativity(:-), Base.operator_associativity(:+), Base.operator_associativity(:^)
(:left, :none, :right)

julia> Base.operator_associativity(:⊗), Base.operator_associativity(:sin), Base.operator_associativity(:→)
(:left, :none, :right)

请注意,符号如:sin返回优先级0.此值表示无效运算符,而不是最低优先级的运算符。 类似地,这些运算符被赋予关联性:none

欢迎关注微信公众账号Julia语言.jpg

点击阅读原文可查看历史文章

相关文章

  • Julia 教程 从入门到进阶与笔记整理

    Julia 视频教程Julia教程1 简介及安装Julia教程2 REPL与变量Julia教程3 数学运算与矩...

  • Julia中的数学运算2

    欢迎关注Julia语言微信公众账号 julia_language 原文链接:http://suo.im/57CnE...

  • Julia中的数学运算

    欢迎关注Julia语言微信公众账号 julia_language 原文链接:http://suo.im/57yFf...

  • Julia 笔记之数学运算和初等函数

    Julia 笔记之数学运算和初等函数 (qq.com)[https://mp.weixin.qq.com/s?__...

  • PPT行动营之布尔运算

    PPT中的数学运算 PPT中还有数学运算?什么鬼?是的。这个数学运算叫“布尔运算”包括的内容是:联合、组合、拆分、...

  • Julia 集

    Julia 集 Julia 集是由法国数学家 Gaston Julia 和 Pierre Faton 在发展了复变...

  • Day02Python运算符附作业

    python中的运算符;数学运算符、比较运算符、逻辑运算符、赋值运算符、位运算 1.数学运算符;+,-,,,%,/...

  • 2019-04-17运算符和if语句

    1.运算符 1)运算符种类:数学运算符、比较运算符、逻辑运算符、赋值运算符、位运算符2)数学运算符:+ ,- , ...

  • Day6 元组和数字

    一、列表的相关操作 1.列表的数学运算: +,* 加法运算 乘法运算 2.列表的比较运算: ==, != ...

  • 数学的培养

    1 完整语言的表达 2 生活中的数学培养 3 加减法的运算速度

网友评论

    本文标题:Julia中的数学运算2

    本文链接:https://www.haomeiwen.com/subject/dszjwftx.html