julia常用矩陣函式 Julia中的函式

2021-10-13 02:41:26 字數 2337 閱讀 8764

如何宣告函式

julia為我們提供了一些編寫函式的方法。第乙個需要function和end關鍵字

function sayhi(name)

println("hi$name, it's great to see you!")

endfunction f(x)

x^2end

我們可以像這樣呼叫已宣告的函式:

sayhi(「c-3po」)

f(42)

或者,我們可以在一行中重宣告這些功能函式

sayhi2(name) = println("hi$name, it's great to see you!")

f2(x) = x^2

sayhi2("r2d2")

f2(42)

最後,我們還可以將這些函式宣告為「匿名」函式

ayhi3 = name -> println("hi$name, it's great to see you!")

f3 = x -> x^2

sayhi3 ("balabala")

f3(42)

julia中的鴨子模式

"if it quacks like a duck, it's a duck."

舉個例子, sayhi

sayhi(55595472)

f將在矩陣上工作

a = rand(3,3)

print(a)

f(a)

f 會處理像 "hi" 這樣的字串,因為 * 是為字串萬用字元

f("hi")

另一方面,f函式不適用於向量。與定義明確的a^2不同,向量v的v^2不是具有明確含義的代數運算。

v = rand(3)

f(v)

變異與非變異的函式

按照慣例,函式體會寫在 ! 後,去改變原函式的定義,但不要這麼做,看看sort與sort之間的區別

v = [3, 5, 2]

sort(v)

print(v)

sort(v)返回乙個排序陣列,該陣列包含於v相同的元素,但陣列v保持不變,另一方面,當我們執行sort!(v)時,v的內容也會發生改變,陣列v進行也會進行排序

sort!(v)

print(v)

julia 中的高階函式

mapmap是julia中的乙個高階函式,它將函式作為其輸入引數之一,例如:

map(f,[1,2,3])

將會輸出乙個陣列,其中函式f已經應用於所有元素[1,2,3],等效於:

[f(1),f(2),f(3)]

在這裡,我們將陣列[1,2,3]中的元素進行平方,怎麼做?

為此,我們可以傳遞給map匿名函式而不是命名函式,例如

x->x^3

map(x->x^3,[1,2,3])

現在,我們已經將所有元素進行了平方。

broadcast

broadcast是另乙個高階函式,就像map函式。broadcast是乙個概括的map函式,但它實現的功能比map的更多。呼叫broadcast的語法與呼叫map的語法相同

broadcast(f, [1, 2, 3])

再一次,我們通過「broadcast」 應用f(平方)所有元素[1, 2, 3]

呼叫broadcast函式的一些語法糖,.是在你想要的函式和它的輸入引數之間放置乙個broadcast。例如,

broadcast(f, [1, 2, 3])

是相同的

f.([1, 2, 3])

再次注意這與呼叫有何不同

f([1, 2, 3]) # error 會報錯

我們可以對向量的每個元素進行平方,但我們不能對向量求平方! 為了驗證這一點,讓我們來看看它們之間的區別

f(a)

和f.(a)

對於矩陣a:

a = [i + 3*j for j in 0:2, i in 1:3]

f(a)

和以前一樣,我們可以看到矩陣a,

f(a) = a^2 = a * a

另一方面,

b = f.(a)

包含所有條目a。

這種用於broadcast的點語法允許我們以看起來自然,更接近數學符號的方式編寫相對複雜的復合元素表示式。例如,我們可以寫

a .+ 2 .* f.(a) ./ a

用來代替

broadcast(x -> x + 2 * f(x) / x, a)

而且兩者的表現完全相同

留幾個練習題:

1.試著編寫乙個add_one()函式,在其輸入的引數加一

2.使用map或briadcast將矩陣a的每個元素遞增1並將賦值給變數a

3.使用briadcast .語法將矩陣中a的每個元素遞增1並將其儲存在變數a2中

Julia常用函式

轉化資料型別 繪圖注釋 直接在陣列後面新增乙個元素 push pts,xk pts是陣列,xk是要新增的元素 對陣列進行批處理 reduce 2,3,4 結果是9 可以用來做判斷的時候能用 if reduce 條件1,條件2,條件3 可以用來將函式的結果組合成乙個陣列 map x x 2,3,4,5...

Julia 矩陣計算

使用巨集 isdefined isdefined x x new value 自定義巨集 可以在賦值的時候,如果某個屬性變數沒有被賦值,則將值設定給某個變數 macro ifund exp local e exp isdefined main,e.args 1 e.args 1 esc exp en...

Julia對矩陣進行預先賦值

我們知道,對於matlab和julia 而言,預先賦值可以獲得更快的運算速度,特別是matlab.由於julia 經常用循還解決相關問題,預先賦值使用的頻率相比matlab而言大大減小。不過,還是有一些地方,可能用到的,盡量不要使用cat 操作,效率低下,速度慢得很。這個原則,還僅是對於matlab...