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

PythonライブラリをElixirで開発してみた

yujikawa
December 22, 2017

 PythonライブラリをElixirで開発してみた

PythonのnumpyをElixirで開発を行いました。

yujikawa

December 22, 2017
Tweet

More Decks by yujikawa

Other Decks in Technology

Transcript

  1. &MJYJSͰ։ൃͯ͠Έͨ
    1ZUIPOϥΠϒϥϦΛ
    GVLVPLBFY
    Ώ͔͡Θ!ZVKJLBXB@QZ

    View Slide

  2. ࣗݾ঺հ
    w ໊લ
    w ઒্༞࢘ Ώ͔͡Θ

    w ॴଐ
    w ΧϥϏφςΫϊϩδʔ
    w ৬छ
    w όοΫΤϯυΤϯδχΞ
    w 5XJUUFS
    w !ZVKJLBXB@QZ
    w ීஈͷ͓࢓ࣄ
    w 1ZUIPOΛ࢖ͬͨγεςϜ։ൃ
    w ͦͷ͏ͪ&MJYJSͷγεςϜ։ൃ΍ΔΑɾɾʁ
    w ϓϥΠϕʔτ
    w &MJYJSษڧதʢ̎Χ݄͙Β͍ʁʣ
    w 1Z'VLVPLBͷ؅ཧਓ΍͍ͬͯ·͢

    View Slide

  3. ͳͥϥΠϒϥϦ։ൃʁ
    w ϓϩάϥϛϯά&MJYJSΛڭՊॻʹຖ೔ίπίπษڧ
    w ڭՊॻͷ಺༰Λͣͬͱ΍͍ͬͯͯ๞͖͖ͯͨɻʢେࣄ͚ͩͲʣ
    w Կ͔࡞Δ͜ͱͰ৭ʑௐ΂ΔͷͰɺษڧʹͳΔͱࢥͬͨɻ
    w Կ͔࡞Δ͜ͱ͸Ϟνϕʔγϣϯ্͕͕Δɻ
    w 8FCΞϓϦΑΓखܰͳ੒Ռ෺ʹ͔ͨͬͨ͠ɻ

    View Slide

  4. ԿΛ࡞ͬͨͷ͔ʁ
    w 1ZUIPOͷ/VNQZΛ&MJYJSͰ࣮૷ͯ͠Έ·ͨ͠ɻ
    w /VNQZ
    w ߦྻܭࢉͳͲΛߦ͑ΔϥΠϒϥϦʔ

    View Slide

  5. ͦͷ໊΋ʮ/VNFYZʯ
    w ಡΈํ͸ʮφϝΫγʔʯͰ͢

    View Slide

  6. ͲΜͳײ͔͡ʁ
    ϕΫτϧΛ࡞Δ
    &MJYJS
    iex> x = Numexy.new([1,2,3])
    %Array{array: [1, 2, 3], shape: {3, nil}}
    1ZUIPO
    In [1]: numpy.array([1,2,3])

    View Slide

  7. ͲΜͳײ͔͡ʁ
    ϕΫτϧͷ಺ੵ
    &MJYJS
    iex> x = Numexy.new([1,2,3])
    %Array{array: [1, 2, 3], shape: {3, nil}}
    iex> y = Numexy.new([1,2,3])
    %Array{array: [1, 2, 3], shape: {3, nil}}
    iex> Numexy.dot(x, y)
    14
    1ZUIPO
    In[1]: numpy.dot(x, y)

    View Slide

  8. ͲΜͳײ͔͡ʁ
    ࿦ཧճ࿏ʢ903Λ࡞Δʣ
    ANDճ࿏
    def lgAND(x1,x2) do
    x = Numexy.new([x1, x2])
    w = Numexy.new([0.5, 0.5])
    b = -0.7
    Numexy.mul(x, w) |> Numexy.sum |> Kernel.+(b) |> output
    end
    NANDճ࿏
    def lgNAND(x1,x2) do
    x = Numexy.new([x1, x2])
    w = Numexy.new([-0.5, -0.5])
    b = 0.7
    Numexy.mul(x, w) |> Numexy.sum |> Kernel.+(b) |> output
    end
    ORճ࿏
    def lgOR(x1,x2) do
    x = Numexy.new([x1, x2])
    w = Numexy.new([0.5, 0.5])
    b = -0.2
    Numexy.mul(x, w) |> Numexy.sum |> Kernel.+(b) |> output
    end

    View Slide

  9. ͲΜͳײ͔͡ʁ
    ࿦ཧճ࿏ʢ903Λ࡞Δʣ
    iex> lgXOR(0,0)
    0
    iex> lgXOR(1,0)
    1
    iex> lgXOR(0,1)
    1
    iex> lgXOR(1,1)
    0
    ࣮ߦ݁Ռ
    XORճ࿏
    def lgXOR(x1,x2) do
    lgAND(lgNAND(x1, x2), lgOR(x1, x2))
    end

    View Slide

  10. ͦͷଞؔ਺
    ৄࡉ͸υΩϡϝϯτʹॻ͍͍ͯ·͢ɻIUUQTIFYEPDTQNOVNFYZ/VNFYZIUNM
    w BEE
    w NVM
    w POFT
    w [FSPT
    w TVN
    w BWH
    w USBOTQPTF
    w BSHNBY

    View Slide

  11. ผࢴɿϥΠϒϥϦ։ൃखॱ
    ৽نϓϩδΣΫτ࡞੒
    NJYOFXQSPKFDU@OBNF
    ޷͖ͳΑ͏ʹ։ൃɾɾɾ

    View Slide

  12. ผࢴɿϥΠϒϥϦެ։खॱ
    ᶃ)FYΞΧ΢ϯτͷ࡞੒ʢαΠτͰొ࿥΋Մʣ
    ίϚϯυͰ΍Δ৔߹
    NJYIFYVTFSSFHJTUFS
    )FYͷαΠτͰొ࿥ͨ͠৔߹͸ೝূ͢Δ
    NJYIFYVTFSBVUI

    View Slide

  13. ผࢴɿϥΠϒϥϦެ։खॱ
    ᶄNJYFYʹFY@EPDϥΠϒϥϦΛEFQTʹ௥Ճ
    \FY@EPD POMZEFW^
    NJYEJQTHFU
    ᶅ)FY΁ެ։͢Δ
    NJYIFYQVCMJTI

    View Slide

  14. ·ͱΊ
    w ਺ࣜΛؔ਺Λ࢖ͬͯදݱ͢Δͱ͍͏ͷ͸ָ͘͠·͍͍ͨײ
    ͡ʹߟ͑ΔςʔϚͩͬͨͨΊඇৗʹษڧʹͳΓ·ͨ͠ɻ
    w ϥΠϒϥϦ։ൃલͱൺ΂Δͱ&OVNͷ࢖͍ํ্͕ୡͨ͠ɻ
    w 'MPXͰॻ͖௚ͨ͘͠ͳͬͨɻ

    View Slide

  15. ྑ͍ϥΠϒϥϦ։ൃϥΠϑΛʂ
    ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide