Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Julia語言入門
杜岳華
Julia Taiwan 發起人
Outline
 變數的宣告及使用
 數字相關的型別及運算 (eg. 整數、浮點數、有理數、複
數)
 布林值與運算
 條件判斷與迴圈
 字元與字串的型別與運算
 介紹函式
 介紹集合容器 (collections eg. Arr...
想必大家都是被這個語言的高效能給
吸引來的…………
能夠處理很快,能跑大量數據……還
可以平行運算、分散式運算
那………其他人就不行嗎?
有誰是被這個語言的優雅及簡潔給吸
引來的?
我!
我是誰
 杜岳華
 衛生福利部疾病管制署
 檢驗及研究中心 中區實驗室
 研發替代役 研究助理
 陽明 生醫資訊所 碩士
 成大 醫學檢驗及生物技術系 學士
 資訊工程系 學士
• 專案經驗
• EZPrivacy加密認證系統
•...
想成為生醫資料科學家!!
正片開始
 println(“hello world!”)
一切都從數字開始…
 在Julia中數字有下列幾種形式
 整數
 浮點數
 有理數
 複數
Julia的整數跟浮點數是有不同位元版
本的
Integer
Int8
Int16
Int32
Int64
Int128
Unsigned
Uint8
Uint16
Uint32
Uint64
Uint128
Float
Float16
Flo...
有理數
 有理數表示
 自動約分
 自動調整負號
 接受分母為0
2//3 # 2//3
-6//12 # -1//2
5//-20 # -1//4
5//0 # 1//0
num(2//10) # 1
den(7//14) # 2
2...
複數
1 + 2im
(1 + 2im) + (3 - 4im) # 4 - 2im
(1 + 2im)*(3 - 4im) # 11 + 2im
(-4 + 3im)^(2 + 1im) # 1.950 + 0.651im
real(1 + ...
我們來宣告變數吧!
 指定或不指定型別
x = 5
y = 4::Int64
z = x + y
println(z) # 9
變數可以很隨便
 動態型別語言特性
x = 5
println(x) # 5
println(typeof(x)) # Int64
x = 6.0
println(x) # 6.0
println(typeof(x)) # Float64
值都不會動
 Value is immutable
 object_id(): get a hash
value based on object
identity.
x = 5
println(object_id(x))
x = 6.0
p...
x
6.0
5
靜態型別與動態型別
 靜態型別跟動態型別最大的差別在於型別是跟著變
數還是值。
5
5
x
x
躺著玩、坐著玩、趴著玩,還是運算
子好玩
 +x: 就是x本身
 -x: 變號
 x + y, x - y, x * y, x / y: 一般四則運算
 div(x, y): 商
 x % y: 餘數,也可以用rem(x, y)
 ...
操縱數字的機械核心
 ~x: bitwise not
 x & y: bitwise and
 x | y: bitwise or
 x $ y: bitwise xor
 x >>> y:無正負號,將x的位元右移y個位數
 x >...
方便的更新方法
 +=
 -=
 *=
 /=
 =
 %=
 ^=
 &=
 |=
 $=
 >>>=
 >>=
 <<=
x += 5
x = x + 5
超級比一比
 x == y:等於
 x != y, x ≠ y:不等於
 x < y:小於
 x > y:大於
 x <= y, x ≤ y:小於或等於
 x >= y, x ≥ y:大於或等於
a, b, c = (1, 3, 5...
不同型別的運算與轉換
 算術運算會自動轉換
 強型別
3.14 * 4 # 12.56
parse(“5”) # 5
convert(AbstractString, 5) # “5”
強型別與弱型別
5 “5”
5 “5”
+
+
Implicitly
感覺這樣有點乾
 我們來寫個小遊戲好了
來寫個猜拳遊戲好了
paper = 1 # 這代表布
scissor = 2 # 這代表剪刀
stone = 3 # 這代表石頭
判斷輸贏
 If判斷式
 短路邏輯
if scissor > paper
println("scissor win!!")
end
if <判斷式>
<程式碼>
end
if 3 > 5 && 10 > 0
…
end
使用者輸入
println("請輸入要出的拳”)
println(“1代表布,2代表剪刀,3代表石頭:")
s = readline(STDIN)
x = parse(s)
組織起來
if x == paper
println("你出布")
elseif x == scissor
println("你出剪刀")
elseif x == stone
println("你出石頭")
end
if <判斷式1>
<程式碼...
電腦怎麼出拳
 rand(): 隨機0~1
 rand([]): 從裡面選一個出來
y = rand([1, 2, 3])
巢狀比較
if x == y
println("平手")
elseif x == paper
println("你出布")
if y == scissor
println("電腦出剪刀")
println("電腦贏了")
elseif y ==...
我的義大利麵條
elseif x == scissor
println("你出剪刀")
if y == paper
println("電腦出布")
println("你贏了")
elseif y == stone
println("電腦出石頭"...
我想玩很多次
while <判斷式>
<程式碼>
end
x = …
while <持續條件>
...
x = …
end
停止條件
s = readline(STDIN)
x = parse(s)
while x != -1
...
s = readline(STDIN)
x = parse(s)
end
函式來幫忙
function add(a, b)
c = a + b
return c
end
函式怎麼講話
 參數傳遞
 pass-by-sharing
 個人認為跟call by reference很像就是了
5x
function foo(a)
end
a
函式怎麼講話
 多個回傳值
funciton foo(a, b, c)
return (a, b, c)
end
我看到重複了
 函式是消除重複的好工具!
 像我們之前有寫了非常多的條件判斷,其實重複性
很高,感覺很蠢,我們可以設法把出拳的判斷獨立
出來。
簡化重複
function shape(x)
if x == paper
return "布"
elseif x == scissor
return "剪刀"
elseif x == stone
return "石頭"
end
end
你需要的是一個矩陣
 突然神說了一句話,解救了凡人的我。XD
 是的,或許你需要一個表來讓你查。
| 布 剪刀 石頭
-------------------
布| 0 -1 1
剪刀| 1 0 -1
石頭| -1 1 0
陣列
A = [2, 3, 5]
A[2]
[ ]2 3 5
多維陣列
A = [0, -1, 1;
1, 0, -1;
-1, 1, 0]
A[1, 2]
字串的簡易操作
 concatenate
 x要是字串
"你出" * x
簡化完畢
 稱為重構
 refactoring
win_or_lose = A[x, y]
x = shape(x)
y = shape(y)
if win_or_lose == 0
println("平手")
else
println("...
任意數量參數
function foobar(a, b, x::Vararg{Int64})
println(a)
println(b)
println(x)
end
foobar(1, 2, 3, 4)
可選參數
function foo(a, b, c=10)
...
end
foo(1, 2)
foo(1, 2, 3)
關鍵字參數
function bar(a, b; i=5, j=6)
...
end
bar(1, 2, i=10)
我要怎麼選
 我的建議
 關鍵字參數: 使用情境彼此互斥的時候
 可選參數: 類似情境而可具備預設值的時候
For 迴圈
for i = 1:5 # for迴圈,有限的迴圈次數
println(i)
end
介紹Array
 homogenous
 start from 1
 mutable
[1, 2, 3, 4, 5]
豆漿油條
strings = ["foo","bar","baz"]
for s in strings
println(s)
end
數值運算
 介紹各種Array函式
zeros(Float64, 2, 2) # 2-by-2 matrix with 0
ones(Float64, 3, 3) # 3-by-3 matrix with 1
trues(2, 2) # 2-...
Comprehension
[x for x = 1:3]
[x for x = 1:20 if x % 2 == 0]
["$x * $y = $(x*y)" for x=1:9, y=1:9]
[1, 2, 3]
[2, 4, 6, 8, ...
Tuple
 Immutable
tup = (1, 2, 3)
tup[1] # 1
tup[1:2] # (1, 2)
(a, b, c) = (1, 2, 3)
Set
 Mutable
filled_set = Set([1, 2, 2, 3, 4])
push!(filled_set,5)
intersect(filled_set, other_set)
union(filled_set, oth...
Dict
 Mutable
filled_dict = Dict("one"=> 1, "two"=> 2, "three"=>
3)
keys(filled_dict)
values(filled_dict)
Dict(x=> i for ...
Thank you for attention
預告
 第二次meetup
 型別系統
 Multiple dispatch
Nächste SlideShare
Wird geladen in …5
×

20161209-Julia Taiwan first meetup-julia語言入門

524 Aufrufe

Veröffentlicht am

Julia Taiwan 第一次 meetup

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

20161209-Julia Taiwan first meetup-julia語言入門

  1. 1. Julia語言入門 杜岳華 Julia Taiwan 發起人
  2. 2. Outline  變數的宣告及使用  數字相關的型別及運算 (eg. 整數、浮點數、有理數、複 數)  布林值與運算  條件判斷與迴圈  字元與字串的型別與運算  介紹函式  介紹集合容器 (collections eg. Array, Set, Dict...)
  3. 3. 想必大家都是被這個語言的高效能給 吸引來的…………
  4. 4. 能夠處理很快,能跑大量數據……還 可以平行運算、分散式運算
  5. 5. 那………其他人就不行嗎?
  6. 6. 有誰是被這個語言的優雅及簡潔給吸 引來的?
  7. 7. 我!
  8. 8. 我是誰  杜岳華  衛生福利部疾病管制署  檢驗及研究中心 中區實驗室  研發替代役 研究助理  陽明 生醫資訊所 碩士  成大 醫學檢驗及生物技術系 學士  資訊工程系 學士 • 專案經驗 • EZPrivacy加密認證系統 • Java-based • 現在應用於成大公文系統 • Transcriptome資料分析 • Python-based • 碩論
  9. 9. 想成為生醫資料科學家!!
  10. 10. 正片開始  println(“hello world!”)
  11. 11. 一切都從數字開始…  在Julia中數字有下列幾種形式  整數  浮點數  有理數  複數
  12. 12. Julia的整數跟浮點數是有不同位元版 本的 Integer Int8 Int16 Int32 Int64 Int128 Unsigned Uint8 Uint16 Uint32 Uint64 Uint128 Float Float16 Float32 Float64
  13. 13. 有理數  有理數表示  自動約分  自動調整負號  接受分母為0 2//3 # 2//3 -6//12 # -1//2 5//-20 # -1//4 5//0 # 1//0 num(2//10) # 1 den(7//14) # 2 2//4 + 1//7 # 9//14 3//10 * 6//9 # 1//5 10//15 == 8//12 # true float(3//4) # 0.75
  14. 14. 複數 1 + 2im (1 + 2im) + (3 - 4im) # 4 - 2im (1 + 2im)*(3 - 4im) # 11 + 2im (-4 + 3im)^(2 + 1im) # 1.950 + 0.651im real(1 + 2im) # 1 imag(3 + 4im) # 4 conj(1 + 2im) # 1 - 2im abs(3 + 4im) # 5.0 angle(3 + 3im)/pi*180 # 45.0
  15. 15. 我們來宣告變數吧!  指定或不指定型別 x = 5 y = 4::Int64 z = x + y println(z) # 9
  16. 16. 變數可以很隨便  動態型別語言特性 x = 5 println(x) # 5 println(typeof(x)) # Int64 x = 6.0 println(x) # 6.0 println(typeof(x)) # Float64
  17. 17. 值都不會動  Value is immutable  object_id(): get a hash value based on object identity. x = 5 println(object_id(x)) x = 6.0 println(object_id(x)) x = 5 println(object_id(x)) println(object_id(5)) 0x1595c9b31d160009 0x0147908c8135e7ae 0x1595c9b31d160009 0x1595c9b31d160009
  18. 18. x 6.0 5
  19. 19. 靜態型別與動態型別  靜態型別跟動態型別最大的差別在於型別是跟著變 數還是值。 5 5 x x
  20. 20. 躺著玩、坐著玩、趴著玩,還是運算 子好玩  +x: 就是x本身  -x: 變號  x + y, x - y, x * y, x / y: 一般四則運算  div(x, y): 商  x % y: 餘數,也可以用rem(x, y)  x y: 反除,等價於y / x  x ^ y: 次方
  21. 21. 操縱數字的機械核心  ~x: bitwise not  x & y: bitwise and  x | y: bitwise or  x $ y: bitwise xor  x >>> y:無正負號,將x的位元右移y個位數  x >> y:保留正負號,將x的位元右移y個位數  x << y: 將x的位元左移y個位數 https://www.technologyuk.net/mathematics/number- systems/images/binary_number.gif
  22. 22. 方便的更新方法  +=  -=  *=  /=  =  %=  ^=  &=  |=  $=  >>>=  >>=  <<= x += 5 x = x + 5
  23. 23. 超級比一比  x == y:等於  x != y, x ≠ y:不等於  x < y:小於  x > y:大於  x <= y, x ≤ y:小於或等於  x >= y, x ≥ y:大於或等於 a, b, c = (1, 3, 5) a < b < c # true
  24. 24. 不同型別的運算與轉換  算術運算會自動轉換  強型別 3.14 * 4 # 12.56 parse(“5”) # 5 convert(AbstractString, 5) # “5”
  25. 25. 強型別與弱型別 5 “5” 5 “5” + + Implicitly
  26. 26. 感覺這樣有點乾  我們來寫個小遊戲好了
  27. 27. 來寫個猜拳遊戲好了 paper = 1 # 這代表布 scissor = 2 # 這代表剪刀 stone = 3 # 這代表石頭
  28. 28. 判斷輸贏  If判斷式  短路邏輯 if scissor > paper println("scissor win!!") end if <判斷式> <程式碼> end if 3 > 5 && 10 > 0 … end
  29. 29. 使用者輸入 println("請輸入要出的拳”) println(“1代表布,2代表剪刀,3代表石頭:") s = readline(STDIN) x = parse(s)
  30. 30. 組織起來 if x == paper println("你出布") elseif x == scissor println("你出剪刀") elseif x == stone println("你出石頭") end if <判斷式1> <程式碼1> elseif <判斷式2> <程式碼2> else <程式碼3> end
  31. 31. 電腦怎麼出拳  rand(): 隨機0~1  rand([]): 從裡面選一個出來 y = rand([1, 2, 3])
  32. 32. 巢狀比較 if x == y println("平手") elseif x == paper println("你出布") if y == scissor println("電腦出剪刀") println("電腦贏了") elseif y == stone println("電腦出石頭") println("你贏了") end ...
  33. 33. 我的義大利麵條 elseif x == scissor println("你出剪刀") if y == paper println("電腦出布") println("你贏了") elseif y == stone println("電腦出石頭") println("電腦贏了") endelseif x == stone println("你出石頭") if y == scissor println("電腦出剪刀") println("你贏了") elseif y == paper println("電腦出布") println("電腦贏了") end end if x == y println("平手") elseif x == paper println("你出布") if y == scissor println("電腦出剪刀") println("電腦贏了") elseif y == stone println("電腦出石頭") println("你贏了") end
  34. 34. 我想玩很多次 while <判斷式> <程式碼> end x = … while <持續條件> ... x = … end
  35. 35. 停止條件 s = readline(STDIN) x = parse(s) while x != -1 ... s = readline(STDIN) x = parse(s) end
  36. 36. 函式來幫忙 function add(a, b) c = a + b return c end
  37. 37. 函式怎麼講話  參數傳遞  pass-by-sharing  個人認為跟call by reference很像就是了 5x function foo(a) end a
  38. 38. 函式怎麼講話  多個回傳值 funciton foo(a, b, c) return (a, b, c) end
  39. 39. 我看到重複了  函式是消除重複的好工具!  像我們之前有寫了非常多的條件判斷,其實重複性 很高,感覺很蠢,我們可以設法把出拳的判斷獨立 出來。
  40. 40. 簡化重複 function shape(x) if x == paper return "布" elseif x == scissor return "剪刀" elseif x == stone return "石頭" end end
  41. 41. 你需要的是一個矩陣  突然神說了一句話,解救了凡人的我。XD  是的,或許你需要一個表來讓你查。 | 布 剪刀 石頭 ------------------- 布| 0 -1 1 剪刀| 1 0 -1 石頭| -1 1 0
  42. 42. 陣列 A = [2, 3, 5] A[2] [ ]2 3 5
  43. 43. 多維陣列 A = [0, -1, 1; 1, 0, -1; -1, 1, 0] A[1, 2]
  44. 44. 字串的簡易操作  concatenate  x要是字串 "你出" * x
  45. 45. 簡化完畢  稱為重構  refactoring win_or_lose = A[x, y] x = shape(x) y = shape(y) if win_or_lose == 0 println("平手") else println("你出" * x) println("電腦出" * y) if win_or_lose == 1 println("你贏了") else println("電腦贏了") end end
  46. 46. 任意數量參數 function foobar(a, b, x::Vararg{Int64}) println(a) println(b) println(x) end foobar(1, 2, 3, 4)
  47. 47. 可選參數 function foo(a, b, c=10) ... end foo(1, 2) foo(1, 2, 3)
  48. 48. 關鍵字參數 function bar(a, b; i=5, j=6) ... end bar(1, 2, i=10)
  49. 49. 我要怎麼選  我的建議  關鍵字參數: 使用情境彼此互斥的時候  可選參數: 類似情境而可具備預設值的時候
  50. 50. For 迴圈 for i = 1:5 # for迴圈,有限的迴圈次數 println(i) end
  51. 51. 介紹Array  homogenous  start from 1  mutable [1, 2, 3, 4, 5]
  52. 52. 豆漿油條 strings = ["foo","bar","baz"] for s in strings println(s) end
  53. 53. 數值運算  介紹各種Array函式 zeros(Float64, 2, 2) # 2-by-2 matrix with 0 ones(Float64, 3, 3) # 3-by-3 matrix with 1 trues(2, 2) # 2-by-2 matrix with true eye(3) # 3-by-3 diagnal matrix rand(2, 2) # 2-by-2 matrix with random number
  54. 54. Comprehension [x for x = 1:3] [x for x = 1:20 if x % 2 == 0] ["$x * $y = $(x*y)" for x=1:9, y=1:9] [1, 2, 3] [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] [“1 * 1 = 1“, “1 * 2 = 2“, “1 * 3 = 3“ ...]
  55. 55. Tuple  Immutable tup = (1, 2, 3) tup[1] # 1 tup[1:2] # (1, 2) (a, b, c) = (1, 2, 3)
  56. 56. Set  Mutable filled_set = Set([1, 2, 2, 3, 4]) push!(filled_set,5) intersect(filled_set, other_set) union(filled_set, other_set) setdiff(Set([1, 2, 3, 4]), Set([2, 3, 5])) Set([i for i=1:10])
  57. 57. Dict  Mutable filled_dict = Dict("one"=> 1, "two"=> 2, "three"=> 3) keys(filled_dict) values(filled_dict) Dict(x=> i for (i, x) in enumerate(["one", "two", "three", "four"]))
  58. 58. Thank you for attention
  59. 59. 預告  第二次meetup  型別系統  Multiple dispatch

×