Upgrade to Pro — share decks privately, control downloads, hide ads and more …

それ NArray でできるよ

tmaeda
February 08, 2014

それ NArray でできるよ

tmaeda

February 08, 2014
Tweet

More Decks by tmaeda

Other Decks in Technology

Transcript

  1. ͦΕ/"SSBZͰ
    Ͱ͖ΔΑ
    札幌中央区RRuubbyy会議0011
    22001144年22月88日
    @@ttmmaaeeddaa

    View Slide

  2. !UNBFEB

    View Slide

  3. !UNBFEB
    w3VCZྺ͸΋͏೥ʹͳΓ·͢ɻ

    View Slide

  4. !UNBFEB
    w3VCZྺ͸΋͏೥ʹͳΓ·͢ɻ
    (C)Ωϟϓςϯཌྷ

    View Slide

  5. !UNBFEB
    w3VCZྺ͸΋͏೥ʹͳΓ·͢ɻ
    (C)Ωϟϓςϯཌྷ

    View Slide

  6. !UNBFEB
    wͦͷੲຊΛॻ͍ͨΓ΋͠·ͨ͠ɻ

    View Slide

  7. !UNBFEB
    wաڈճ΄Ͳࡳຈ3VCZձٞͰ3BJMTͷ͓࿩Λ͞
    ͤͯ௖͖·ͨ͠ɻ

    View Slide

  8. !UNBFEB
    w ג
    ͑ʹ͠ςοΫͰͲͬ΀Γ3VCZͰ࢓ࣄ͕Ͱ͖
    ͯ޾ͤͰ͢ɻ

    View Slide

  9. ࠓ೔͸ޚࣾͷϏδωε
    Ͱ͝׆༻͍͚ͨͩΔ
    /"SSBZ
    ͷ͝ఏҊͰ͢ɻ

    View Slide

  10. /"SSBZʁ

    ॳࣖ

    ໊લ͙Β͍͸ฉ͍ͨࣄ͋Δ

    ࢖ͬͨ͜ͱ͋Δ

    Α͘࢖͏

    View Slide

  11. /"SSBZ
    wాதণ޺͞Μ࡞ͷ3VCZ༻ଟ࣍ݩ਺஋഑ྻܭࢉ
    ϥΠϒϥϦɻ
    wओʹେྔͷ਺஋ܭࢉΛߴ଎ʹॲཧ͢Δ͜ͱΛ໨
    తʹ࡞ΒΕͨ΋ͷɻ
    http://magazine.rubyist.net/?0006-RLR

    View Slide

  12. ͲΕ͙Β͍଎͍͔ʁ
    ഑ྻཁૉ਺
    ඵ਺
    ഑ྻʹ͔Β·Ͱͷཚ਺Λ֨ೲ͠ɺͦͷ߹ܭɺฏۉɺ෼ࢄɺ࠷େ஋ɺ࠷খ஋ΛٻΊΔͷʹ͔͔ͬͨ߹ܭඵ਺
    3VCZ /"SSBZ .BD#PPL"JS*OUFM$PSFJ()[

    View Slide

  13. ͲΕ͙Β͍଎͍͔ʁ
    ഑ྻཁૉ਺
    ඵ਺
    ഑ྻʹ͔Β·Ͱͷཚ਺Λ֨ೲ͠ɺͦͷ߹ܭɺฏۉɺ෼ࢄɺ࠷େ஋ɺ࠷খ஋ΛٻΊΔͷʹ͔͔ͬͨ߹ܭඵ਺
    3VCZ /"SSBZ .BD#PPL"JS*OUFM$PSFJ()[

    ໿ഒ
    ߴ଎

    View Slide

  14. ͲΕ͙Β͍଎͍͔ʁ
    ഑ྻཁૉ਺
    ඵ਺
    ഑ྻʹ͔Β·Ͱͷཚ਺Λ֨ೲ͠ɺͦͷ߹ܭɺฏۉɺ෼ࢄɺ࠷େ஋ɺ࠷খ஋ΛٻΊΔͷʹ͔͔ͬͨ߹ܭඵ਺
    3VCZ /"SSBZ .BD#PPL"JS*OUFM$PSFJ()[

    ໿ഒ
    ߴ଎
    Ͱɾ͢ɾ͕ʜ

    View Slide




  15. View Slide

  16. ສ݅Ҏ
    ্ͷܭࢉΛΑ
    ͘ඞཁͱ͢Δ
    ਓʙʁ



    View Slide

  17. Ͱ͸ɺͲΜͳ
    ʹখͯ͘͞΋
    ͍͍ͷͰɺද
    ܭࢉΛΑ͘ඞ
    ཁͱ͢Δ
    ਓʙʁ

    View Slide

  18. ͱ͍͏Θ͚Ͱɺࠓ೔͸
    /"SSBZͷ଎౓໘ΑΓ
    ΋ɺදܭࢉػೳʹ
    ண໨͓ͨ͠࿩Λ͠·͢ɻ

    View Slide

  19. ྫ͑͹ɺ͜Μͳද

    View Slide

  20. ྫ͑͹ɺ͜Μͳද
    ߦ໨શମͷ߹ܭ͸ʁ

    View Slide

  21. &YDFMͩͱʁ

    View Slide

  22. 3VCZඪ४ͷ"SSBZͩͱʁ
    a = [[1,2,3], [4,5,6], [7,8,9]]
    => [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    a[1].inject(:+)
    => 15

    View Slide

  23. /"SSBZͩͱʁ
    na = NArray.int(3,3).indgen!(1,1)
    => NArray.int(3,3):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ] ]
    na[true, 1]
    => NArray.int(3):
    [ 4, 5, 6 ]
    na[true, 1].sum
    => 15

    View Slide

  24. /"SSBZͩͱʁ
    na = NArray.int(3,3).indgen!(1,1)
    => NArray.int(3,3):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ] ]
    na[true, 1]
    => NArray.int(3):
    [ 4, 5, 6 ]
    na[true, 1].sum
    => 15
    JOUܕͷ
    ºͷ࣍ݩ
    ഑ྻΛ༻ҙͯ͠

    View Slide

  25. /"SSBZͩͱʁ
    na = NArray.int(3,3).indgen!(1,1)
    => NArray.int(3,3):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ] ]
    na[true, 1]
    => NArray.int(3):
    [ 4, 5, 6 ]
    na[true, 1].sum
    => 15
    ࢝·ΓͰɺ
    ͣͭ૿Ճ͢Δ਺Ͱ
    ຒΊΔ

    View Slide

  26. /"SSBZͩͱʁ
    na = NArray.int(3,3).indgen!(1,1)
    => NArray.int(3,3):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ] ]
    na[true, 1]
    => NArray.int(3):
    [ 4, 5, 6 ]
    na[true, 1].sum
    => 15
    ศ্ٓɺԣ࣠ΛY࣠ɺ
    ॎ࣠ΛZ࣠ͱݺͼ·͢
    Αɻ
    Y
    Z

    View Slide

  27. /"SSBZͩͱʁ
    na = NArray.int(3,3).indgen!(1,1)
    => NArray.int(3,3):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ] ]
    na[true, 1]
    => NArray.int(3):
    [ 4, 5, 6 ]
    na[true, 1].sum
    => 15
    Y࣠͸શ෦ɺ
    Z࣠͸൪໨ɺ
    Λऔಘ
    ศ্ٓɺԣ࣠ΛY࣠ɺ
    ॎ࣠ΛZ࣠ͱݺͼ·͢
    Αɻ
    Y
    Z

    View Slide

  28. /"SSBZͩͱʁ
    na = NArray.int(3,3).indgen!(1,1)
    => NArray.int(3,3):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ] ]
    na[true, 1]
    => NArray.int(3):
    [ 4, 5, 6 ]
    na[true, 1].sum
    => 15
    ͦΕΛ߹ܭ

    View Slide

  29. ·ͱΊΔͱʁ
    na = NArray.int(3,3).indgen!(1,1)
    => NArray.int(3,3):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ] ]
    na[true, 1].sum
    => 15

    View Slide

  30. /"SSBZͷಛ௕
    na = NArray.int(3,3).indgen!(1,1)
    => NArray.int(3,3):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ] ]
    na[true, 1].sum
    => 15
    ͪΌΜͱºͷܗ
    Ͱදࣔͯ͘͠ΕΔ

    View Slide

  31. /"SSBZͷಛ௕
    na = NArray.int(3,3).indgen!(1,1)
    => NArray.int(3,3):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ] ]
    na[true, 1].sum
    => 15
    ૢ࡞͸શͯNBQɻ
    ࣗ෼ͰNBQ
    ΍JOKFDUͳͲΛॻ
    ͘ඞཁ͸ͳ͍ɻ

    View Slide

  32. ൺ΂ͯΈ·͠ΐ͏
    x࣠ํ޲΁ͷ߹ܭ
    Array a[1].inject(:+)
    NArray na[true, 1].sum

    View Slide

  33. ൺ΂ͯΈ·͠ΐ͏
    x࣠ํ޲΁ͷ߹ܭ
    Array a[1].inject(:+)
    NArray na[true, 1].sum
    /"SSBZͷํ͕௚ײత
    Ͱ͕͢ɺ
    "SSBZͰ΋
    ·ͩڐͤΔϨϕϧ

    View Slide

  34. Z࣠ํ޲ͷ߹ܭ΋
    ΍ͬͯΈ·͠ΐ͏

    View Slide

  35. ྫ͑͹ɺ͜Μͳද
    "ྻશମͷ߹ܭ͸ʁ

    View Slide

  36. &YDFMͩͱʁ

    View Slide

  37. 3VCZඪ४ͷ"SSBZͩͱʁ
    a = [[1,2,3], [4,5,6], [7,8,9]]
    => [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    a.map{|row| row[0]}.inject(:+)
    => 12

    View Slide

  38. /"SSBZͩͱʁ
    na = NArray.int(3,3).indgen!(1,1)
    => NArray.int(3,3):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ] ]
    na[0, true]
    => NArray.int(3):
    [ 1, 4, 7 ]
    na[0, true].sum
    => 12

    View Slide

  39. /"SSBZͩͱʁ
    na = NArray.int(3,3).indgen!(1,1)
    => NArray.int(3,3):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ] ]
    na[0, true]
    => NArray.int(3):
    [ 1, 4, 7 ]
    na[0, true].sum
    => 12
    Y࣠͸൪໨ɺ
    Z࣠͸શ෦
    Λऔಘ
    Y
    Z

    View Slide

  40. /"SSBZͩͱʁ
    na = NArray.int(3,3).indgen!(1,1)
    => NArray.int(3,3):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ] ]
    na[0, true]
    => NArray.int(3):
    [ 1, 4, 7 ]
    na[0, true].sum
    => 12
    ͦΕΛ߹ܭ

    View Slide

  41. ·ͱΊΔͱʁ
    na = NArray.int(3,3).indgen!(1,1)
    => NArray.int(3,3):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ] ]
    na[0, true].sum
    => 12

    View Slide

  42. ൺ΂ͯΈ·͠ΐ͏
    x࣠ํ޲΁ͷ߹ܭ y࣠ํ޲΁ͷ߹ܭ
    Array a[1].inject(:+)
    a.map{|row| row[0]}.
    inject(:+)
    NArray na[true, 1].sum na[0, true].sum

    View Slide

  43. ൺ΂ͯΈ·͠ΐ͏
    x࣠ํ޲΁ͷ߹ܭ y࣠ํ޲΁ͷ߹ܭ
    Array a[1].inject(:+)
    a.map{|row| row[0]}.
    inject(:+)
    NArray na[true, 1].sum na[0, true].sum
    "SSBZͩͱɺྻͷ߹ܭͷͱ͖ͷίʔυͱશ͘ର
    শੑ͕ͳ্͍ʹɺগ͠௕ͯ͘Կ΍͍ͬͯΔͷ͔
    Θ͔Γʹ͍͘Ͱ͢Ͷ

    View Slide

  44. ͜͜·Ͱͷ·ͱΊ
    w/"SSBZͰ͸දΛදͱͯ͠ѻ͑·͢ɻ
    wૢ࡞͸શͯNBQ΍JOKFDUʹ૬౰͢ΔͷͰɺࣗ
    ෼ͰNBQ΍JOKFDUΛॻ͘ඞཁ͕͋Γ·ͤΜɻ

    View Slide

  45. ΋ͬͱෳࡶͳྫ΋
    ΍ͬͯΈ·͠ΐ͏

    View Slide

  46. ूܭද࡞͍ͬͯͩ͘͞Ҋ݅

    View Slide

  47. ूܭද࡞͍ͬͯͩ͘͞Ҋ݅
    Α͋͘Γ·͢ΑͶʁ

    View Slide

  48. ୅ͷখܭΛٻΊΔʹ͸ʁ

    View Slide

  49. 3VCZඪ४ͷ"SSBZͰߟ͑
    Δͷ͸΋͏ࢭΊ·ͯ͠ʜ

    View Slide

  50. /"SSBZͰ
    na = NArray.int(3,3).indgen!(1,1)
    => NArray.int(3,3):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ] ]
    na[true, [0,1]]
    => NArray.int(3,2):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ] ]
    na[true, [0,1]].sum(1)
    => NArray.int(3):
    [ 5, 7, 9 ]

    View Slide

  51. /"SSBZͰ
    na = NArray.int(3,3).indgen!(1,1)
    => NArray.int(3,3):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ] ]
    na[true, [0,1]]
    => NArray.int(3,2):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ] ]
    na[true, [0,1]].sum(1)
    => NArray.int(3):
    [ 5, 7, 9 ]
    Y࣠͸શ෦ɺ
    Z࣠͸൪໨ͱ൪໨
    Λऔಘ
    Y
    Z

    View Slide

  52. /"SSBZͰ
    na = NArray.int(3,3).indgen!(1,1)
    => NArray.int(3,3):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ] ]
    na[true, [0,1]]
    => NArray.int(3,2):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ] ]
    na[true, [0,1]].sum(1)
    => NArray.int(3):
    [ 5, 7, 9 ]
    ͦΕΛZ࣠ํ޲ʹ
    ߹ܭ

    View Slide

  53. ͪͳΈʹ
    na[true, [0,1]]
    => NArray.int(3,2):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ] ]
    na[true, [0,1]].sum(0)
    na[true, [0,1]].sum(1)
    na[true, [0,1]].sum
    => NArray.int(2):
    [ 6, 15 ]
    => NArray.int(3):
    [ 5, 7, 9 ]
    => 21

    View Slide

  54. ͪͳΈʹ
    na[true, [0,1]]
    => NArray.int(3,2):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ] ]
    na[true, [0,1]].sum(0)
    na[true, [0,1]].sum(1)
    na[true, [0,1]].sum
    => NArray.int(2):
    [ 6, 15 ]
    => NArray.int(3):
    [ 5, 7, 9 ]
    => 21
    TVN
    ͩͱɺ
    Y࣠ํ޲ʹ߹ܭ͞Εͯ

    View Slide

  55. ͪͳΈʹ
    na[true, [0,1]]
    => NArray.int(3,2):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ] ]
    na[true, [0,1]].sum(0)
    na[true, [0,1]].sum(1)
    na[true, [0,1]].sum
    => NArray.int(2):
    [ 6, 15 ]
    => NArray.int(3):
    [ 5, 7, 9 ]
    => 21
    TVN
    ͩͱɺ
    Z࣠ํ޲ʹ߹ܭ͞Εͯ

    View Slide

  56. ͪͳΈʹ
    na[true, [0,1]]
    => NArray.int(3,2):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ] ]
    na[true, [0,1]].sum(0)
    na[true, [0,1]].sum(1)
    na[true, [0,1]].sum
    => NArray.int(2):
    [ 6, 15 ]
    => NArray.int(3):
    [ 5, 7, 9 ]
    => 21
    TVNͩͱɺ
    શํ޲ʹ
    ߹ܭ͞Ε·͢

    View Slide

  57. ͭ·Γɺ͜ͷลશ෦ɺTVN
    ͰٻΊΒΕΔΘ͚Ͱ͢ʂ
    TVN

    TVN

    TVN

    View Slide

  58. ͜Μͳߟ͑ํ΋
    ͋Γ·͢ɻ

    View Slide

  59. ͍ͭ͘ͷ࣠Ͱ෼ྨ͞Εͨ
    දͰ͠ΐ͏͔ʁ

    View Slide

  60. ͍ͭ͘ͷ࣠Ͱ෼ྨ͞Εͨ
    දͰ͠ΐ͏͔ʁ

    ੈ୅ͷ࣠

    View Slide

  61. ͍ͭ͘ͷ࣠Ͱ෼ྨ͞Εͨ
    දͰ͠ΐ͏͔ʁ

    ੑผͷ࣠

    View Slide

  62. ͍ͭ͘ͷ࣠Ͱ෼ྨ͞Εͨ
    දͰ͠ΐ͏͔ʁ

    ళͷ࣠

    View Slide

  63. ͱ͍͏͜ͱ͸ɺ࣍ݩ
    ͷදͰ࣋ͭํ͕ࣗવ
    ͳͷͰ͸ʁ

    View Slide

  64. ͜Μͳײ͡



    "ళ

    #ళ

    $ళ













    ººͷදʢۭؒ

    View Slide

  65. na = NArray.int(3, 2, 2).indgen!(1, 1)
    => NArray.int(3,2,2):
    [ [ [ 1, 2, 3 ],
    [ 4, 5, 6 ] ],
    [ [ 7, 8, 9 ],
    [ 10, 11, 12 ] ] ]
    /"SSBZͰදݱ͢Δͱʁ

    View Slide

  66. na[0, 0, 0]
    => 1
    na[0, 1, 0]
    => 4
    na[0, 0, 1]
    => 7
    ஋Λऔಘͯ͠Έ·͠ΐ͏
    "ళ உ ୅
    "ళ ঁ ୅
    "ళ உ ୅

    View Slide

  67. ୅ͷ஋શ෦͸ʁ
    na[true, true, 0]
    => NArray.int(3,2):
    [ [ 1, 2, 3 ],
    [ 4, 5, 6 ] ]
    na[true, true, 0].sum
    => 21
    ళશ෦ ୅
    ੑผશ෦

    View Slide

  68. உੑͷ஋શ෦͸ʁ
    na[true, 0, true]
    => NArray.int(3,2):
    [ [ 1, 2, 3 ],
    [ 7, 8, 9 ] ]
    na[true, 0, true].sum
    => 30
    ళશ෦ ੈ୅શ෦
    உੑ

    View Slide

  69. ΋ͬͱศརʹʂ
    w/"SSBZ͸Կ࣍ݩͷσʔλͰ΋ѻ͑Δ
    w͍͍ͪͪ஋ͱ഑ྻͷΠϯσοΫεΛ಄Ͱߟ͑ͯ
    ରԠ͚ͮΔͷ໘౗ͳͷͰɺͦ͜Λਓʹ༏͍͠ײ
    ͡ͷϥούʔΛඃͤͯ͋͛Δͱɺ೚ҙͷ਺ͷ࣠
    ͰσʔλΛ੔ཧͰ͖Δശ͕Ͱ͖͕͋Γ·͢ɻ

    View Slide

  70. cube = Cube.new([
    {key: :mise, values: ["Aళ", "Bళ", "Cళ"]},
    {key: :sedai, values: ["10୅","20୅"]},
    {key: :sei, values:["உ","ঁ"]}
    ])
    # ళA, 20୅, ঁʹ20Λઃఆ
    cube.set( { mise: "Aళ", sedai: "20୅", sei: "ঁ" }, 20)
    # ళA, 20୅, ঁͷ஋Λऔಘ
    cube.get( { mise: "Aళ", sedai: "20୅", sei: "ঁ" })
    => 20
    # 10୅ͷ஋Λऔಘ
    cube.get( { sedai: "10୅"} )
    => NArray.int(3,2):
    [ [ 1, 2, 3 ],
    [ 7, 8, 9 ] ]

    View Slide

  71. ·ͱΊ
    w/"SSBZ͸೚ҙͷ਺ͷ࣠ͷσʔλΛࣗ༝ʹѻ͑
    ·͢ɻ
    w/"SSBZ͸ͦͷσʔλۭؒͷதͷ޷͖ͳ৔ॴͷ
    σʔλʹॊೈʹΞΫηεͰ͖·͢ɻ
    w&YDFM͙Β͍ΧδϡΞϧʹ/"SSBZΛ࢖͍·͠
    ΐ͏ʂ

    View Slide

  72. ࢀߟ
    wϚχϡΞϧ
    IUUQOBSSBZSVCZGPSHFPSHJOEFYIUNMKB
    w3VCZٯҾ͖Ϩγϐ Ϩγϐ

    wOVNQZؔ܎ͷࢿྉ

    View Slide

  73. ͥͻޚࣾͷϏδωε
    ΁͝׆༻͍ͩ͘͞ɻ

    View Slide