• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    同等学历教学

    同等学历教学

    免费
    阅读更多
  • 特色
    • 展示
    • 关于我们
    • 问答
  • 事件
  • 个性化
  • 博客
  • 联系
  • 站点资源
    有任何问题吗?
    (00) 123 456 789
    weinfoadmin@weinformatics.cn
    注册登录
    恒诺新知
    • 主页
    • 课程

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      同等学历教学

      同等学历教学

      免费
      阅读更多
    • 特色
      • 展示
      • 关于我们
      • 问答
    • 事件
    • 个性化
    • 博客
    • 联系
    • 站点资源

      老俊俊的生信笔记

      • 首页
      • 博客
      • 老俊俊的生信笔记
      • Julia 笔记之数学运算和初等函数

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

      • 发布者 weinfoadmin
      • 分类 老俊俊的生信笔记
      • 日期 2022年5月1日
      测试开头

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

      没关注?伸出手指点这里—

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

      1引言

      今天分享一下 Julia 中的数学运算和初等函数。Julia 为它所有的基础数值类型,提供了整套的基础算术和位运算,也提供了一套高效、可移植的标准数学函数。

      本文内容摘抄自 Julia 中文文档。

      2算术运算符

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

      除了优先级比二元操作符高以外,直接放在标识符或括号前的数字,如 2x 或 2(x+y) 还会被视为乘法。

      符号 ÷ 可以通过输入 div<tab> 到 REPL 或 Julia IDE 的方式来打出。

      julia> 1 + 2 + 3
      6

      julia> 1 - 2
      -1

      julia> 3*2/12
      0.5

      在乘法操作中,false 被视作零:

      julia> NaN * false
      0.0

      julia> false * Inf
      0.0

      3布尔运算符

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

      4位运算符

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

      例子:

      julia> ~123
      -124

      julia> 123 & 234
      106

      julia> 123 | 234
      251

      julia> 123 ⊻ 234
      145

      julia> xor(123, 234)
      145

      julia> nand(123, 123)
      -124

      julia> 123 ⊼ 123
      -124

      julia> nor(123, 124)
      -128

      julia> 123 ⊽ 124
      -128

      julia> ~UInt32(123)
      0xffffff84

      julia> ~UInt8(123)
      0x84

      5复合赋值运算符

      每一个二元运算符和位运算符都可以给左操作数复合赋值:方法是把 = 直接放在二元运算符后面。比如,x += 3 等价于 x = x + 3:

      julia> x = 1
      1

      julia> x += 3
      4

      julia> x
      4

      二元运算符和位运算符的复合赋值操作符有下面几种:

      +=  -=  *=  /=  =  ÷=  %=  ^=  &=  |=  ⊻=  >>>=  >>=  <<=

      6向量化 “点” 运算符

      Julia 中,每个二元运算符都有一个 “点” 运算符与之对应,例如 ^ 就有对应的 .^ 存在。这个对应的 .^ 被 Julia 自动地定义为逐元素地执行 ^ 运算。比如 [1,2,3] ^ 3 是非法的,因为数学上没有给(长宽不一样的)数组的立方下过定义。但是 [1,2,3] .^ 3 在 Julia 里是合法的,它会逐元素地执行 ^ 运算(或称向量化运算),得到 [1^3, 2^3, 3^3]。类似地,! 或 √ 这样的一元运算符,也都有一个对应的 .√ 用于执行逐元素运算:

      julia> [1,2,3] .^ 3
      3-element Vector{Int64}:
        1
        8
       27

      除了点运算符,我们还有逐点赋值运算符,类似 a .+= b(或者 @. a += b)会被解析成 a .= a .+ b,这里的 .= 是一个融合的 in-place 运算。

      7数值比较

      标准的比较操作对所有原始数值类型有定义:

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

      例子:

      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
      • +0 等于但不大于 -0。
      • 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 给这些特别的数提供了下面几个额外的测试函数。这些函数在某些情况下很有用处,比如在做 hash 比较时:

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

      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

      8链式比较

      与其他多数语言不同,就像 notable exception of Python 一样,Julia 允许链式比较:

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

      链式比较在写数值代码时特别方便,它使用 && 运算符比较标量,数组则用 & 进行按元素比较。比如,0 .< A .< 1 会得到一个 boolean 数组,如果 A 的元素都在 0 和 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) 是计算了两次的。然而,链式比较中的顺序是不确定的。强烈建议不要在表达式中使用有副作用(比如 printing)的函数。如果的确需要,请使用短路运算符 &&。

      9数值转换

      Julia 支持三种数值转换,它们在处理不精确转换上有所不同。

      • T(x) 和 convert(T,x) 都会把 x 转换为 T 类型。
        1. T 如果 T 是浮点类型,转换的结果就是最近的可表示值, 可能会是正负无穷大。
        2. 如果 T 为整数类型,当 x 不能由 T 类型表示时,会抛出 InexactError。
      • x % T 将整数 x 转换为整型 T,与 x 模 2^n 的结果一致,其中 n 是 T 的位数。换句话说,在二进制表示下被截掉了一部分。
      • T 舍入函数 接收一个 T 类型的可选参数。比如,round(Int,x) 是 Int(round(x)) 的简写版。

      10舍入函数

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

      11除法函数

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

      12符号和绝对值函数

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

      13幂、对数与平方根

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

      14三角和双曲函数

      所有标准的三角和双曲函数也都已经定义了:

      sin    cos    tan    cot    sec    csc
      sinh   cosh   tanh   coth   sech   csch
      asin   acos   atan   acot   asec   acsc
      asinh  acosh  atanh  acoth  asech  acsch
      sinc   cosc

      所有这些函数都是单参数函数,不过 atan 也可以接收两个参数 来表示传统的 atan2 函数。

      另外,sinpi(x) 和 cospi(x) 分别用来对 sin(pix) 和 cos(pix) 进行更精确的计算。

      要计算角度而非弧度的三角函数,以 d 做后缀。比如,sind(x) 计算 x 的 sine 值,其中 x 是一个角度值。下面是角度变量的三角函数完整列表:

      sind   cosd   tand   cotd   secd   cscd
      asind  acosd  atand  acotd  asecd  acscd

      15特殊函数

      SpecialFunctions.jl 提供了许多其他的特殊数学函数。



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


      欢迎加入生信交流群。加我微信我也拉你进 微信群聊 老俊俊生信交流群 哦,数据代码已上传至QQ群,欢迎加入下载。

      群二维码:

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


      老俊俊微信:


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

      知识星球:


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


      所以今天你学习了吗?

      今天的分享就到这里了,敬请期待下一篇!

      最后欢迎大家分享转发,您的点赞是对我的鼓励和肯定!

      如果觉得对您帮助很大,赏杯快乐水喝喝吧!



       往期回顾 





      ◀XAM 包处理 sam 和 bam 文件

      ◀Nature 文章主图结果复现

      ◀windows 也能快速处理 BAM/SAM 大型文件

      ◀Julia 笔记之变量-整数-浮点数

      ◀cell 代码优化测试复现二 (终)

      ◀cell 代码优化测试复现一

      ◀R 语言绘制二维密度相关性散点图

      ◀Julia 的下载安装及配置

      ◀使用 python 进行 Ribo–seq 质控分析 二

      ◀deeptools 结果重新绘图

      ◀...

      测试结尾

      请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!

      • 分享:
      作者头像
      weinfoadmin

      上一篇文章

      XAM 包处理 sam 和 bam 文件
      2022年5月1日

      下一篇文章

      R语言学习:阅读《R For Everyone 》(第二版)
      2022年5月1日

      你可能也喜欢

      8-1651542331
      跟着Nature学绘图(2) 箱线图-累积分布曲线图
      2 5月, 2022
      9-1651542322
      Julia 笔记之字符串
      2 5月, 2022
      7-1651542357
      XAM 包处理 sam 和 bam 文件
      30 4月, 2022

      搜索

      分类

      • R语言
      • TCGA数据挖掘
      • 单细胞RNA-seq测序
      • 在线会议直播预告与回放
      • 数据分析那些事儿分类
      • 未分类
      • 生信星球
      • 老俊俊的生信笔记

      投稿培训

      免费

      alphafold2培训

      免费

      群晖配置培训

      免费

      最新博文

      Nature | 单细胞技术揭示衰老细胞与肌肉再生
      301月2023
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      301月2023
      如何快速批量修改 Git 提交记录中的用户信息
      261月2023
      logo-eduma-the-best-lms-wordpress-theme

      (00) 123 456 789

      weinfoadmin@weinformatics.cn

      恒诺新知

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      链接

      • 课程
      • 事件
      • 展示
      • 问答

      支持

      • 文档
      • 论坛
      • 语言包
      • 发行状态

      推荐

      • iHub汉语代码托管
      • iLAB耗材管理
      • WooCommerce
      • 丁香园论坛

      weinformatics 即 恒诺新知。ICP备案号:粤ICP备19129767号

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      要成为一名讲师吗?

      加入数以千计的演讲者获得100%课时费!

      现在开始

      用你的站点账户登录

      忘记密码?

      还不是会员? 现在注册

      注册新帐户

      已经拥有注册账户? 现在登录

      close
      会员购买 你还没有登录,请先登录
      • ¥99 VIP-1个月
      • ¥199 VIP-半年
      • ¥299 VIP-1年
      在线支付 激活码

      立即支付
      支付宝
      微信支付
      请使用 支付宝 或 微信 扫码支付
      登录
      注册|忘记密码?