Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
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
Prochain SlideShare
Chargement dans…5
×

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

523 vues

Publié le

Julia Taiwan 第一次 meetup

Publié dans : Technologie
  • Soyez le premier à commenter

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

×