julia常用矩阵函数_Julia系列教程3 数学运算 矩阵运算
數學運算https://www.zhihu.com/video/1113554595376295936
數學運算
比Matlab更直觀的數學表達方式
x = 10
2x
>>20
但這就導致了可能會出現語法的沖突十六進制整數文本表達式 0xff 可以被解析為數值文本 0 乘以變量 xff
浮點數文本表達式 1e10 可以被解析為數值文本 1 乘以變量 e10
因此,Julia中
以 0x 開頭的表達式,都被解析為十六進制文本
以數字文本開頭,后面跟著 e 或 E ,都被解析為浮點數文本
運算方法
常用的 + - x /就不多說了,跟其他語言基本完全一樣。
這里說一下向量運算,跟MATLAB的操作完全相同,比如向量的點乘,就是說對向量的元素一一操作
[1,2,3].*3
>>3-element Array{Int64,1}:
3
6
9
比較運算,支持鏈式比較
1 <= 2 <= 3 == 3 <=5 >4 >=2
>>true
常用的數學函數
# 進位函數
round(x) #四舍五入
floor(x) #向下取整
ceil(x) #向上取整
trunc(x) #trunc是直接砍掉小數,在正數的時候trunc跟floor一樣,負數時跟ceil一樣
# 除法函數
div(x,y) #取模
fld(x,y) #取小于結果的最大整數
cld(x,y) #取大于結果的最小整數
rem(x,y) #取余
mod(x,y)
mod1(x,y1) #如果x是y的整數倍,則返回y,不會返回余數
mod2pi(x) #對2pi取余
divrem(x,y) #返回取模的值和取余的值
fldmod(x,y) #返回取小于x的最大整數和取余的值
gcd(x,y...) #最大公約數
lcm(x,y...) #最小公倍數
# 符號函數
abs(x) #求模
abs2(x) #求平方
sign(x) #取符號
signbit(x) #正數返回false,負數返回true
copysign(x,y) #返回x * sign(y)
flipsign(x,y) #返回x * sign(y) * -1
# 開根號 log
sqrt(x) #開根號
cbrt(x) #開三次根
hypot(x,y) #sqrt(x^2 + y^2)
exp(x) #e^x
expm1(x) #e^-x
ldexp(x,n) #x^n
log(x) #loge(x)
log(b,x) #logb(x)
log2(x) #log2(x)
log10(x) #log10(x)
log1p(x) #loge(1+x)
# 三角函數
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
矩陣操作
既然是做科學計算,那肯定是少不了矩陣,先從簡單的向量說起
首先定義一個簡單的矩陣,在REPL中看返回的類型
a = [1,2,3,4]
>>4-element Array{Int64,1}:
1
2
3
4
Julia中也可以像MATLAB中定義步進向量
aa = (1:2:5)
aa.start
aa.step
aa.stop
first(aa)
step(aa)
last(aa)
Int8[3, 4, 5]
>>3-element Array{Int8,1}:
3
4
5
["one", "two", "threee"]
>>3-element Array{String,1}:
"one"
"two"
"threee"
[true, "two", 1, 2.0]
>>4-element Array{Any,1}:
true
"two"
1
2.0
[]
>>0-element Array{Any,1}
Int8[]
>>0-element Array{Int8,1}
a = (1, 2, 3) # tuple
b = collect(a)
>>3-element Array{Int64,1}:
1
2
3
c = collect(1:4) #不能直接寫成[1:4]
c[2:end]
c1 = c # c1與c的內存地址相同
c2 = c[:] # c2是c的一個拷貝
c1[1] = 10
c
>>4-element Array{Int64,1}:
10
2
3
4
c2[1] = 20
c
>>4-element Array{Int64,1}:
10
2
3
4
b = [1;2;3;4]
>>4-element Array{Int64,1}:
1
2
3
4
c = [1 2 3 4]
>>1×4 Array{Int64,2}:
1 2 3 4
再來看矩陣拼接中的空格 , ;的區別
x = ones(2,3)
y = zeros(2,3)
z = [x y]
>>2×6 Array{Float64,2}:
1.0 1.0 1.0 0.0 0.0 0.0
1.0 1.0 1.0 0.0 0.0 0.0
相當于hcat(x,y)
ndims(z)
>>2
z = [x,y]
>>2-element Array{Array{Float64,2},1}:
[1.0 1.0 1.0; 1.0 1.0 1.0]
[0.0 0.0 0.0; 0.0 0.0 0.0]
ndims(z)
>>1
[x;y]
>>4×3 Array{Float64,2}:
1.0 1.0 1.0
1.0 1.0 1.0
0.0 0.0 0.0
0.0 0.0 0.0
相當于vcat(x,y)
ndims(z)
>>2
那怎么把[x,y]也變成一個沒有嵌套的矩陣呢?
hcat([x,y]...) #表示把矩陣內部的Array作拼接
# 矩陣索引,從1開始
x[1]
>>1
x[6]
>>1
size(x)
>>(2,3)
length(x)
>>6
sum(x)
>>6
矩陣運算
a = collect(reshape(1:6,2,3))
b = ones(2,3)
a .+ b
a .- b
a * b # error
a .* b
a * b'
a / b
a ./ b
函數對矩陣操作時,也要加.
A = [1,2,3]
sin.(A)
>>3-element Array{Float64,1}:
0.8414709848078965
0.9092974268256817
0.1411200080598672
添加/刪除/移動
a = [1,2,3]
push!(a, 4)
pop!(a)
push!(a, 4,5,6)
push!(a, [7,8,9])
>>error
append!(a, [7,8,9])
prepend!(a, [10,11,12])
arr = reshape(1:6, 2, 3)
circshift(arr, (0,1))
circshift(arr, (1,-2))
對于矩陣的基本操作中,很多matlab中的函數Julia中基本也有,用法也基本一致
eg.
rand(10)
rand(2,3)
rand(Int32,2,3)
reshape(1:6, (2,3))
注:如果有些常用的數學函數發現在Julia中不能使用,比如mean()函數,則可以使用Statistics package。常用的數值分析的函數都在里面。
在網易云課堂上搜索《Julia教程 從入門到進階》可以看到所有免費教程視頻
微信公眾號:Quant_Times
Julia系列教程
總結
以上是生活随笔為你收集整理的julia常用矩阵函数_Julia系列教程3 数学运算 矩阵运算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: activity直接销毁_Android
- 下一篇: anaconda安装成功测试_学习笔记1