Cameologist

Tina的小站,随机胡诌&科研笔记。调试中...

0%

Julia学习笔记

最近稍微学习了一种新的编程语言,感觉做科学计算很好用,似乎比python好用。准备写个小程序算点东西。
具体来说,在不太应该操心变量类型的地方可以完全不管,有许多同名的method会自动匹配。
而在想要限制变量类型的时候又非常方便。(当然对于性能的提升还有待学习)
另外函数的用法也很灵活。(有待学习)
学的时候不禁感慨自己从来没学会过python和C++。
这里会记录我学习的时候觉得重要的东西。

数组

占位

  • 有时候定义数组的时候不写入值,与其直接写入某个trivial的值,不如什么都不干只是预留内存的位置。
  • 这种时候就可以用undef来占位:A=Array{Float64}(undef,2,3).
  • 这时输出数组A就是当前分配的内存上的数值:
    1
    2
    3
    4
    julia> A=Array{Float64}(undef,2,3)
    2×3 Matrix{Float64}:
    2.19125e-314 2.19125e-314 2.19125e-314
    2.19125e-314 2.19125e-314 2.19125e-314

  • nothing可以做什么都没有的占位符。
  • 可以用函数isnothing,notnothing判断一个值是不是nothing.
  • 可以用函数something来跳过什么都没有的地方:something(nothing,1)输出1

  • 如果数组中存在缺失的值,这时可以用missing占位,帮助定位缺失的值的影响。
  • missing会在运算中传播,数学运算中包括missing就会返回missing
  • 要判断x是不是missing应该使用函数ismissing(x),而不是x==missing,因为missing==missing会返回missing.

切片(slice)和视图(view)

  • 切片是在内存中制作一个原数组的副本,对其进行操作。
  • 视图(view)是数组的一部分,看起来像一个新的数组,但实际上对它的操作会被直接写入底层的数组。
  • 效率分析:进行简单的操作的时候,使用视图更高效,因为创建副本消耗更多;进行比较复杂的操作的时候,直接创建副本更高效。

复数

  • 使用im而不是i或者j。例如1+2im就是一个复数。
  • 构造复数的时候可以用im的乘法:a+b*im.
  • 但是这样不如complex函数高效:complex(a,b).

函数

  • 输入变量可以指定变量类型(就像C),但也可以不指定变量类型(就像Python),因此非常灵活。
  • 函数可以直接写成显示表达式,直观。
  • 函数可以返回nothing等占位用的变量类型。