- Julia主网站:https://julialang.org/
- Julia官方文档:https://docs.julialang.org/en/v1/
- Julia扩展包查找:https://juliahub.com/ui/Packages
- 清华大学开源软件镜像网站:https://mirror.tuna.tsinghua.edu.cn/help/julia/
-
下载和解压
julia
软件包wget https://julialang-s3.julialang.org/bin/linux/x64/1.7/julia-1.7.3-linux-x86_64.tar.gz tar zxvf julia-1.7.3-linux-x86_64.tar.gz
-
添加环境变量
vim ~/.bashrc export PATH="$PATH:/data/ustc/julia-1.7.3/bin" source ~/.bashrc
-
将
Julia
添加到Jupyter Notebook
import Pkg Pkg.add("IJulia")
$ julia
_
_ _ _(_)_ | Documentation: https://docs.julialang.org
(_) | (_) (_) |
_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.7.3 (2022-05-06)
_/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release
|__/ |
julia>
-
查看
julia
的配置情况:julia> versioninfo()
-
显示当前工作路径:
julia> pwd()
-
更改工作目录:
julia> cd("/data/ustc/")
julia
源程序用.jl
作为扩展名,运行当前目录下的my_program.jl
:julia> include("my_program.jl")
- REPL的5种提示模式:
- Julia模式:第一行开头为
julia>
的模式,为REPL的默认操作模式。 - Help模式:在Julia模式下键入
?
可进入Help模式查看帮助文档(按Backspace
可退出Help模式)。如在help?>
后输入:print()
- Shell模式:在Julia模式下键入
;
可进入Shell模式(按Backspace
可退出Shell模式)。如在shell>
后输入:cd /data/ustc/
- i-search模式:在Julia模式下同时按
Ctrl
键+R
键可进入i-search模式(同时按Ctrl
键+C
键可退出i-search模式)。 - pacakge模式:在Julia模式下键入
]
可进入pacakge模式(按Backspace
可退出pacakge模式),可通过运行如下命令来管理Package:help
:查看Package。status
:查看安装的Package列表。add xxx
:安装某个Package。build xxx
:使Package能够运行。update xxx
:更新Package到新版本。remove xxx
:删除Package。
- Julia模式:第一行开头为
- 同时按
Ctrl
键+D
键或输入exit()
可退出REPL。 - 同时按
Ctrl
键+C
键可中止当前正在运行的耗时较长的程序。 - 在REPL中,在代码的结尾加上
;
,则其结果不会被显示。 - 变量
ans
总会储存最新一行执行代码的结果。
- 常量的关键字是
const
const e = 2.71828182845904523536 const pi = 3.14159265358979323846
- 变量类型
x = 10 # 整型变量 y = -10.0 # 浮点型变量 z = 1 + 2im # 复数变量 k = 2//3 # 有理数变量 name = "zhang" # 字符串变量 myc = 'A' # 字符变量
julia
中的整数可直接写成-123
。julia
中的浮点数可直接写成0.123
,也可直接写成科学记数法形式1.23e-1
。julia
中的复数可直接写成1+2im
。julia
中的字符用单引号''
表示,字符串用双引号“”
或三重双引号""""""
表示。- 用
typeof()
求某个值的类型:# 64位系统: julia> typeof(-123) Int64 julia> typeof(1.23e-1) Float64 julia> typeof(1+2im) Complex{Int64} julia> typeof('A') Char julia> typeof("ustc") String
表达式 | 说明 |
---|---|
-x |
取相反数 |
x + y |
加法 |
x - y |
减法 |
x * y |
乘法 |
x / y |
除法 |
x ÷ y |
取x / y 的整数部分 |
x \ y |
反向除法,等价于y / x |
x ^ y |
x 的y 次幂 |
x % y |
取余数,等价于rem(x,y) |
其中,÷
的输入方法为键入\div
后按Tab
,如此还可输入α
(\alpha)、π
(\pi)、∑
(\sum)、≥
(\ge)、≤
(\le)、≠
(\ne)、∈
(\in)等。
- 常见等数学函数有:
log
,exp
,sqrt
,sin
,cos
,tan
等。 divrem(x, y)
:同时返回x
除以y
的商和余数。round(Int, x)
将x
四舍五入到整数,round(x, digits=2)
将x
四舍五入到2位小数,round(x)
将x
四舍五入到0位小数的浮点数。floor(Int, x)
求小于等于x
的最大整数,floor(x)
返回小于等于x
的最大整数对应的浮点值。ceil(Int, x)
求大于等于x
的最大整数,ceil(x)
返回大于等于x
的最大整数对应的浮点值。factorial(n)
计算阶乘。
-
*
连接两个字符串:julia> "julia_" * "tutorial" "julia_tutorial"
-
^
表示字符串重复:julia> "program" ^ 3 "programprogramprogram"
-
关系运算符
等于 不等于 大于 小于 大于等于 小于等于 ==
!=
>
<
>=
<=
-
逻辑运算符
运算符 逻辑表达式 意义 &&
x && y
如果两个操作数都非零,则条件为真 ||
x || y
如果两个操作数中有任意一个非零,则条件为真 !
! x
逆转操作数的逻辑状态 逻辑运算符优先级低于关系运算符;逻辑运算符内部优先级为
!
>&&
>||
。
-
一般格式
if 条件1 ...... elseif 条件2 ...... else ...... end
-
嵌套if
if 条件1 ...... if 条件2 ...... elseif 条件3 ...... else ...... end elseif 条件4 ...... else ...... end
- 三元运算符
? :
,其构成的条件表达式为:若表达式1 ? 表达式2 : 表达式3
表达式1
的值为真,则返回表达式2
的值,否则返回表达式3
的值。
begin
块t = begin x = 15 y = 12 z = 6 x * y - z end
- 链
x = ( a = 2 ; b = 3 ; c = 6 ; a*b+c )
try...catch
语句try sqrt(-2) catch println("只有非负数才能求平方根!") end
try...finally
语句
无论程序如何退出,finally
语句总被执行。try sqrt(-2) catch println("只有非负数才能求平方根!") finally println("我是finally语句!") end
-
while
循环while 表达式 语句 end
在
julia
中没有do...while
语句。 -
for
循环for 迭代变量 in 可迭代对象 语句 end
可迭代对象包含:字符串、序列、数组、迭代器等。
-
for
循环中的range()
函数range(start, stop[, step])
-
break
和continue
语句- 使用
break
语句可以跳出while
或for
的本层循环。 - 使用
continue
语句可以跳出当前迭代并继续到下一迭代。
- 使用
-
基本内置函数
函数 意义 println()
打印(结束自动换行) readline()
读取一行 readlines()
读取所有行成为一个数组 -
数学函数
数学函数 意义(返回值) round(x)
返回数字的四舍五入值,如 round(4.7)
返回5floor(x)
返回数字的下舍整数,如 floor(4.9)
返回4ceil(x)
返回数字的上入整数,如 ceil(4.1)
返回5trunc(x)
返回数字的向0整数,如 ceil(2.3)
返回2gcd(x,y...)
返回x,y,...的最大公约数 lcm(x,y...)
返回x,y,...的最小公倍数 cos(x)
返回x弧度的余弦值 sin(x)
返回x弧度的正弦值 abs(x)
返回数字的绝对值 sign(x)
返回数学符号,即-1,0,1 sqrt(x)
返回x的平方根 cbrt(x)
返回x的立方根 exp(x)
返回e的x次幂 Log(b,x)
返回以b为基数的x的对数 max(x1, x2, ...)
返回参数或序列的最大值 min(x1, x2, ...)
返回参数或序列的最小值 -
随机函数
随机函数 意义(返回值) rand()
随机产生0~1的浮点数,可指定行、列数,产生均匀分布数 randn()
随机产生0~1的浮点数,可指定行、列数,产生正态分布数 -
字符函数
字符函数 意义 Char()
将数字转换为字符 Int()
将字符转换为数字 -
字符串函数
字符串函数 意义 SubString(string,start,end)
截取字符串中的一部分 length(string)
获取字符串长度 string(a,b)
连接字符串a和b occursion(str,string)
判断字符或字符串str是否在字符串string中,是则返回True,否则返回False
-
julia
自定义函数的规则:- 函数代码块以
function
关键词开头,后接函数标识符名称和圆括号()
; - 任何传入参数和自变量必须放在圆括号中;
- 函数返回值默认最后一个表达式的值,若不想有返回值,则在最后一行加
nothing
; - 一旦运行
return
语句,其后的语句不再运行; - 函数结束的标志为
end
。
function 函数名 (参数列表) 函数体 end
- 函数定义时可指定其参数类型。
function ff(x::Int8) x + 1 end
- 函数代码块以
-
函数调用
若如下函数内容写在
julia_test_5_2.jl
中,function f(x,y) if x > 0 return (x-y) elseif x < 0 return (x+y) else return x*y end end
则通过
include("julia_test_5_2.jl")
可调用该函数。
- 同样的函数,可以有不同的方法,比如加法函数可以实现整数加法,浮点数加法和复数加法等。
function f_plus(x::Int64, y::Int64) x + y end
function f_plus(x::Float64, y::Float64) x + y end
此时执行>>f_plus (generic function with 2 methods)
f_plus(2, 3)
编译器会自动选择更加专用的方法来执行(此处为第一个方法)。
模块是一个包含所有定义的函数和变量的文件。
-
模块定义
module my_module1 export my2 function my1() println("Good !!!") end function my2(name) println("My name is ", name) end end
-
模块调用
using my_module1
-
创建数组
array1 = [1, 3, 5, 7]
-
修改数组
array1[2] = 10
使用
push!(array1, 20)
可在数组后添加新数组项。 -
删除数组
使用deleteat!(array1, 3)
可删除数组的第三个数字。
- 定义元组
tup1 = (1, 2, 3) # 当元组仅含一个元素时,需在元素后添加逗号 tup2 = () # 定义空元组
-
定义字典
dict1 = Dict("name"=>"zhang", "age"=>"10")
-
访问字典的值和键
println("Name: ", dict1["name"])
-
修改字典
dict1["age"] = "20"
- 定义集合
a = Set([1, 2, 3]) a = Set() # 创建空集合
- 创建矩阵
matrix1 = [1 2 3; 4 5 6] matrix2 = rand(1:10, 3, 4) # 创建3×4的随机矩阵 matrix3 = ones(4, 5) # 创建全1矩阵 matrix4 = zeros(5, 6) # 创建全0矩阵
-
横向拼接
a = ones(3, 2) b = zeros(3, 2) c = [a b] 或 c = hcat([a, b]...)
-
纵向拼接
a = ones(3, 2) b = zeros(3, 2) c = [a; b] 或 c = vcat([a, b]...)
-
矩阵加法、矩阵减法
A = rand(2, 3) B = rand(2, 3) C = A + B D = A - B
-
矩阵转置
A = rand(2, 3) B = A'
-
矩阵数乘
A = rand(2, 3) B = 3 * A
-
矩阵乘法
A = rand(2, 3) B = rand(3, 4) C = A * B
-
矩阵的基本函数
typeof()
:矩阵的类型。eltype()
:矩阵中元素的类型。length()
:矩阵中元素的个数。ndims()
:矩阵的维度。size()
:矩阵的行数和列数。
-
矩阵的其它创建函数
a = trues(3, 4) # 创建3×4的元素全true的矩阵 b = falses(3, 4) # 创建3×4的元素全false的矩阵 c = reshape(a, 4, 3) # 重新设置矩阵大小为4×3 d = copy(b) # 复制矩阵
-
矩阵的函数运算
x1 = randn(6, 4) # 创建一个正态分布矩阵 x2 = round.(x1) # 对矩阵x1进行四舍五入运算,round与()之间加一个.表示对矩阵进行操作 x3 = abs.(x1) # 对矩阵x1取绝对值 x4 = sqrt.(x3) # 对矩阵x3取平方根 x5 = sin.(x1) # 对矩阵x1进行正弦运算
-
文件的创建
open(filename, keyword) # filename为创建的文件名,kerword为创建文件的关键字
kerword
的参数及意义:w
:打开文件只用于写入。若文件已存在,则删除原有内容并从头开始编辑。w+
:打开文件用于读写。若文件已存在,则删除原有内容并从头开始编辑。a
:打开文件用于追加。若文件已存在,则新内容将会被写入到已有内容之后。a+
:打开文件用于读写。若文件已存在,则新内容将会被写入到已有内容之后。r
:打开文件只读。r+
:打开文件用于读写。
-
写入文件内容
txt = open("myfile.txt", "w") write(txt, "hello world!") close(txt)
-
读取文件内容
readlines("mybook.txt") # 读取打开文件中的所有内容 readline("mybook.txt") # 读取打开文件的第一行 read("mybook.txt", String)
-
把矩阵写入文件
using DelimitedFiles matrix1 = rand(1:100, 10, 8) mya = open("my_matrix.txt", "w") writedlm(mya, matrix1, "\t") close(mya)
-
从文件中读取矩阵内容
using DelimitedFiles myb = open("my_matrix.txt", "r") readdlm(myb)
using Dates
-
创建日期的方式
my_t = Date(2019,4,11) # 2019-04-11
-
获取创建日期的年、月、日信息
t = Date(2019,4,11) # 2019-04-11 y = Dates.year(t) # 2019 m = Dates.month(t) # 4 d = Dates.day(t) # 11 ym = Dates.yearmonth(t) # (2019, 4) md = Dates.monthday(t) # (4, 11) ymd = Dates.yearmonthday(t) # (2019, 4, 11) Y = Dates.Year(t) # 2019 years M = Dates.Month(t) # 4 months D = Dates.Day(t) # 11 days
-
获取星期几的信息
t = Date(2019,4,11) # 2019-04-11 w = Dates.dayofweek(t) # 4 we = Dates.dayname(t) # Thursday
-
获取月份的信息
t = Date(2019,4,11) # 2019-04-11 m = Dates.month(t) # 4 me = Dates.monthname(t) # April
-
获取年份和季节信息
t = Date(2019,4,11) # 2019-04-11 x1 = Dates.dayofyear(t) # 101 (该日期为整年的第101天) x2 = Dates.isleapyear(t) # false (该年不是闰年) x3 = Dates.quarterofyear(t) # 2 (该日期在第2季度)
-
创建日期时间的方式
t = DateTime(2019,4,11,12,5,3,2) # 2019-04-11T12:05:03.002
-
获取日期时间的信息
t = DateTime(2019,4,11,12,5,3,2) # 2019-04-11T12:05:03.002 y = Dates.year(t) # 2019 m = Dates.month(t) # 4 d = Dates.day(t) # 11 H = Dates.hour(t) # 12 M = Dates.minute(t) # 5 S = Dates.second(t) # 3 MS = Dates.millisecond(t) # 2
Date()
函数和DateTime()
函数的运算t = DateTime(2019,4,11,12,5,3,2) # 2019-04-11T12:05:03.002 t1 = t + Dates.Hour(2) # 2019-04-11T14:05:03.002
- 时间序列实例
Starttime = Date(2018,1,1) Endtime = Date(2018,1,31) Timestep = Dates.Day(1) d = collect(Starttime:Timestep:Endtime)