Julia Juno Jupyter part1 [無断転載禁止]©2ch.net
パッケージがおれおれやってみたばっかりで まともなものが少ねーじゃねーか これ PyPI よりひでーぞ github っつーかオプソは害だな >>16 21世紀にもなって添え字が 1 から始まるとかもうね おまいらなんだかんだ言って みんなそれなりにやってんだな ニヤニヤ >1 乙 >14 前スレで見た覚えがある >16 それな コンパイル中のエラーよりも実行時の型エラーの方が厄介な言語だなこいつは。 慣れれば問題ないが。 >>13 非推奨っぽいが、 これでいいらしい。 "AaBb\\".data 代入も出来るようだ。 s = "AaBb\\" s.data[2] = UInt8(64) s これは割りと嬉しいかも。 julia> @sprintf "ab [%7s]" "xあx" "ab [ xあx]" julia> @sprintf "ab [%-7s]" "xあx" "ab [xあx ]" julia> @sprintf "ab [%7s]" "xxx" "ab [ xxx]" julia> @sprintf "ab [%-7s]" "xxx" "ab [xxx ]" うむむ julia> @sprintf "ab [%-7s]" bytestring(hex2bytes("")) "ab [ ]" julia> @sprintf "ab [%-7s]" bytestring(hex2bytes("4141E381824141")) "ab [AAあAA ]" julia> @sprintf "ab [%-7s]" bytestring(hex2bytes("4141E981824141")) "ab [AA遂AA ]" julia> @sprintf "ab [%-7s]" bytestring(hex2bytes("4141Ee81824141")) "ab [AA\ue042AA ]" julia> @sprintf "ab [%-7s]" bytestring(hex2bytes("4141Ef81824141")) "ab [AA\uf042AA ]" julia> @sprintf "ab [%-7s]" bytestring(hex2bytes("4141E881824141")) "ab [AA聂AA ]" julia> @sprintf "ab [%-7s]" bytestring(hex2bytes("4141E8e8824141")) "ab [AA騂AA ]" julia> @sprintf "ab [%-7s]" bytestring(hex2bytes("4141E9e8824141")) "ab [AAꨂAA ]" julia> @sprintf "ab [%-7s]" bytestring(hex2bytes("414155aa554141")) ERROR: UnicodeError: invalid character index in next at unicode/utf8.jl:65 in strwidth at strings/basic.jl:205 [inlined code] from printf.jl:159 in anonymous at no file:0 julia> @sprintf "ab [%-7s]" hex2bytes("414155aa554141") "ab [UInt8[0x41,0x41,0x55,0xaa,0x55,0x41,0x41]]" >>11 julia> ccall((:curl_version, :libcurl), Ptr{Cchar}, ()) Ptr{Int8} @0x6b29c060 julia> @sprintf "%s" ccall((:curl_version, :libcurl), Ptr{Cchar}, ()) "Ptr{Int8} @0x6b29c060" んーこれも期待した動作と違うなぁ。 >>16 ifに括弧なしは一見便利だけどend強制されるのはPythonに慣れてるとうざく感じる。 julia> Array{UInt8}([1:n;]) == map(a -> UInt8(a), 1:n) true ちょっと気持ち悪いところもある。 julia> Array{UInt8}([1:n;]) == map(a -> UInt8(a), (1:n)) true julia> Array{UInt8}([1:n]) == map(a -> UInt8(a), (1:n)) 警告出るが true (二回目からは警告出なくなる?) julia> Array{UInt8}((1:n)) == map(a -> UInt8(a), (1:n)) エラー >>25 bytestring(ccall((:curl_version, :libcurl), Ptr{Cchar}, ())) >>28 有賀d。 >>24 でも書いたけどbytestringってこんなデータ来ると死ぬから使いたくないなぁ。 julia> bytestring(hex2bytes("414155aa554141")) julia> pointer_to_array(ccall((:curl_version, :libcurl), Ptr{Cchar}, ()), n) でnバイト分のArray{Int8}になるみたいだけどなぜかデフォでUInt8じゃないのが気に入らないなぁ。 julia> Array{UInt8}(pointer_to_array(ccall((:curl_version, :libcurl), Ptr{Cchar}, ()), n)) とかいちいち書くの面倒だなぁ。 >>30 Cchar == UInt8 # false Cchar == Int8 # true >>31 julia> pointer_to_array(ccall((:curl_version, :libcurl), Ptr{UInt8}, ()), n) できました!! ありがとうございます!!! 今はまだ julia 0.3.2 対応みたいだけど web から試せるよ https://try.jupyter.org/ IJulia をインストールすれば自分のサイトでもできるよ https://github.com/JuliaLang/IJulia.jl >>14 ちょっと前から声が大きいだけで連投するうざいのが住み着いて2ちゃんはちょっとアレになったよね 筋が悪い 英語だが Julia をつかった科学計算を丁寧に解説しているサイト ちなみに著者の一人 Sargent はノーベル経済学賞をとっている http://quant-econ.net/jl/ exe 化してみたら dll いっぱい作られて 200MB 超えるな exe なのにロードして実行されるまで時間かかりすぎる 普通に julia --precompiled=yes hoge.jl で実行する方が速かった python の exe 化と大して変わらん 想像以上にアホの子かもな julia> "あいう"[end:end] "う" julia> "あいう"[end-1:end] ERROR: UnicodeError: invalid character index julia> "あいう"[end-3:end] "いう" julia> "あいう"[1:end] "あいう" julia> "あいう"[2:end] ERROR: UnicodeError: invalid character index julia> "あいう"[2] ERROR: UnicodeError: invalid character index julia> "あいう"[3] ERROR: UnicodeError: invalid character index julia> "あいう"[4] 'い' julia> length("あいう") 3 julia> length("1いう") 3 julia> ("1いう")[2] 'い' julia> ("1いう")[end] 'う' julia> ("1いう")[3] ERROR: UnicodeError: invalid character index >>42 # 文字列は文字の配列のように添字アクセスできます "This is a string"[1] # => 'T' # Julia では添字は 1 から始まります # ただし、UTF8 文字列の場合は添字アクセスではうまくいかないので、 # イテレーションを行ってください(map 関数や for ループなど) Pythonの実行速度に満足できないあなたに http://www.mwsoft.jp/programming/julia/python_to_julia.html 正直なところ、まだ足りないところも多い言語なので、 今の時点で飛び込んでもそんなに良いことはないかもしれません。 個人的には分析するデータの整形をさせたり、簡単なシュミレータを書き捨てる用途などで使っています。 適当に書いてもそれなりに速度が出るし記法もシンプルで書きやすいので、 Pythonよりも便利だと感じていますが、 ライブラリの揃いや信頼性などの問題で、前処理だけはJuliaでやって 肝心なところはPythonやRで、といった流れになることもしばしばです。 Pythonの実行速度に満足できないあなたに http://www.mwsoft.jp/programming/julia/python_to_julia.html これからJuliaを始める方へ これからJuliaを始めようという方は、まずは下記ページに書かれているサンプルコードを眺めてみると、 どんな言語か理解できると思います。 Julia By Example http://www.scolvin.com/juliabyexample/ 統計関連のライブラリがどの程度揃っているかは、下記にまとめられています。 ちゃんとDataFrame的なものもあって、そこそこ揃ってはいます。 Julia Statistics https://github.com/JuliaStats 入門書などの情報は出版されれば下記に掲載されると思う。(まだ入門書なんて存在しねーけどな) Learning Julia http://julialang.org/learning/ 公式サイトのドキュメントも充実しています。充実し過ぎてどこから読めばいいのかわからなくなります。 Julia Documentation http://docs.julialang.org/ あとは挙動でわからないことがあれば、ソースを読もう。 わかりやすいシンプルなコードなので、意外と簡単に読めます。 言語作者が書いたコードに触れておくと勉強になるしね。 JuliaLang/julia - GitHub https://github.com/JuliaLang/julia 本当はもっと初見向きなサイトを紹介したかったんだけど、あまり見当たらない。 今の調子ならそのうち増えてくると思うので、 その手の本を書店で見かけるようになった時が始めるタイミングとしては良いんじゃないだろうか。 ※本項は更新情報があれば適宜変更します julia> run(`cmd /c dir`) したときは日本語が UTF-8 に変換されてるのかな julia> open(`cmd /c dir`) do f for l in eachline(f) println(chomp(l)) end end すると結果が違うような気がするけど気のせいかな julia> open("test_out.txt", "w") do w open(`cmd /c dir`) do r for l in eachline(r) println(w, chomp(l)) # これだとSJISで書き込まれているな end end end julia> (3+2im)*(3-2im) 13 + 0im julia> 1//3 + 1//3 + 1//3 1//1 julia> 2π 6.283185307179586 julia> r = 4 4 julia> 2πr ERROR: UndefVarError: πr not defined julia> 2π*r 25.132741228718345 実におしい >>11 ccall((:MessageBoxW, :user32), stdcall, UInt, (Ptr{Void}, Ptr{Cwchar_t}, Ptr{Cwchar_t}, UInt), C_NULL, [0x304C,0x3063,0xFF01,0x0000], [0x306C,0x308B,0x307D,0x0000], 0) この方が良くね? ccall((:MessageBoxW, :user32), stdcall, UInt, (Ptr{Void}, Ptr{Cwchar_t}, Ptr{Cwchar_t}, UInt), C_NULL, pointer("がっ!"), pointer("ぬるぽ"), 0) これだと化けるから、 ccall((:MessageBoxA, :user32), stdcall, UInt, (Ptr{Void}, Ptr{Cchar}, Ptr{Cchar}, UInt), C_NULL, pointer("がっ!"), pointer("ぬるぽ"), 0) にしたんだがやっぱり化ける。 原因はわかるんだが、wchar_t の文字列は作れない子なの? >>41 こういうことらしい。 julia> "ぬるぽ"[nextind("ぬるぽ", 0):end] "ぬるぽ" julia> "ぬるぽ"[nextind("ぬるぽ", 1):end] "るぽ" julia> "ぬるぽ"[nextind("ぬるぽ", 2):end] "るぽ" julia> "ぬるぽ"[nextind("ぬるぽ", 3):end] "るぽ" julia> "ぬるぽ"[nextind("ぬるぽ", 4):end] "ぽ" julia> "ぬるぽ"[nextind("ぬるぽ", 5):end] "ぽ" julia> "ぬるぽ"[nextind("ぬるぽ", 6):end] "ぽ" julia> "ぬるぽ"[nextind("ぬるぽ", 7):end] "" julia> "ぬるぽ"[nextind("ぬるぽ", end-1):end] "ぽ" "るぽ"をendの差分で取るのはループしないかぎりむりぽか >>49-50 julia> ccall((:MessageBoxW, :user32), stdcall, UInt, (Ptr{Void}, Ptr{Cwchar_t}, Ptr{Cwchar_t}, UInt), C_NULL, pointer(utf16("がっ!")), pointer(utf16("ぬるぽ")), 0) julia> ccall((:MessageBoxW, :user32), stdcall, UInt, (Ptr{Void}, Ptr{Cwchar_t}, Ptr{Cwchar_t}, UInt), C_NULL, pointer(wstring("がっ!")), pointer(wstring("ぬるぽ")), 0) >>42-43 >>51-52 julia> utf16("ぬるぽ")[end-1:end] "るぽ" julia> wstring("ぬるぽ")[end-1:end] "るぽ" どうしても UTF-8 のままが良いなら julia> s[prevind(s, end):end] "るぽ" http://docs.julialang.org/en/release-0.4/stdlib/strings/ 読め 結論 >>42 がアホ 地雷満載 julia> length(utf16("あいう")) 3 julia> sizeof(utf16("あいう")) 6 julia> endof(utf16("あいう")) 3 julia> sizeof(utf16("あいう").data) 8 julia> endof(utf16("あいう").data) 4 PythonよりUnicodeの扱いが親切だと思うω if __name__ == "__main__": みたいなのは無いんかな open(hoge) do f fuga(f) end みたいな do end 出来る関数ってどうやって作るんですか? julia> ASCIIString <: AbstractString true julia> Array{ASCIIString, 1} <: Array{AbstractString, 1} false julia> Array{ASCIIString, 1} <: Array{Union{ASCIIString, UTF8String}, 1} false julia> Array{Union{ASCIIString, UTF8String}, 1} <: Array{AbstractString, 1} false julia> typeof(["abc"]) <: Array{ASCIIString, 1} true julia> typeof(["abc"]) <: Array{AbstractString, 1} false julia> typeof(["abc"]) <: Array{Union{ASCIIString, UTF8String}, 1} false これなんとかならんか? 「XXX を削除できません。 ほかの人またはプログラムによって使用されています。 ファイルを使用している可能性があるプログラムをすべて閉じてから、やり直してください。」 が出る場合、そのファイルを使用しているプロセスを知る方法はありますでしょうか あるよ ただ、簡単ならいくらMicrosoftが能無しでもそこのダイアログに誰が開いているか表示するだろう そのくらい面倒くさくまともな方法じゃないってことは察しろ >>61 言いたいことは分かるけど 継承関係にないジェネリッククラスに継承関係を認めたら それはそれで問題が起きるから 特に配列の場合はパフォーマンスが犠牲になるので受け入れがたいし C++とかだとバグの温床なので「できて当然」という考えは捨てた方がいい 匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、 BitTorrentがオープンソースで開発されています 言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか? Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします https://twitter.com/Lyrise_al ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw The Covenant Project 概要 Covenantは、純粋P2Pのファイル共有ソフトです 目的 インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します 特徴 Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW) 接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です DHTにはKademlia + コネクションプールを使用します UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります) 検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません 6 まともな開発者が使うなら何でもいいんだよ juliaユーザーは一概にレベルが低いから信頼性の低いライブラリと化学反応を起こして爆発するのだ ただしnodeよりマシか 初心者に Fortran 教えるくらいなら Julia の方がマシ Jupyter Notebookで説明書きの通りのコードを入れても動きません。 terminals are unavailable と表示されてるのですが、これが動かない理由でしょうか。 C資産との連携を強調してるけど JuliaでC呼ぶのは苦痛でしかない Cで書いた方がまし 相変わらずだな 514 デフォルトの名無しさん sage 2016/07/04(月) 01:22:47.14 a5Gl8mUE Juliaの開発、俺が引き受けるから科研費くれ という主張をしてみるか悩んでる 515 デフォルトの名無しさん sage 2016/07/04(月) 01:35:22.05 WZmggq2i Julia で検索したら、AV 動画見たばかりでワロタ w 516 デフォルトの名無しさん sage 2016/07/04(月) 01:36:38.53 WZmggq2i ありゃ、 AV 動画ばかりって書きたかったの… 517 デフォルトの名無しさん sage 2016/07/04(月) 01:44:34.13 Jqw/8rJ7 私も今まさにそれ思ってた>AVばっかり Juliaってデータ分析というより数値計算じゃないの 全部インメモリの固定長配列にブチ込んでループぶん回す昔ながらのやつだよね 別にデータ分析以外の数値計算が出来ないと言っている訳じゃないし 昔ながらのやつを現代的に書けるというだけでも有意義だろう なんで >>83 へのレスが >>84 みたいなことになるんだろ 文盲かな? なんで >>84 へのレスが >>85 みたいなことになるんだろ 文盲かな? 誤解されてるようなので >実際コード書いてても Python や C++ と比べて julia のコードって汚いんだよな 特定の条件がそろったときだけど 綺麗に描けることもある 誤爆か 言語内DSLを別言語とみなすなら C++で綺麗に書けるものがjuliaで書くと汚いってことは考えにくいんだが? C++は数値を表す抽象型が標準にないのが致命的 そのくせ最近までサイズ固定の整数型がなかった pythonについてはラムダ式が好きになれない(汚いとは別だが) まぁjuliaに求めるものは綺麗さじゃなく実用性なんだ おっぱい的な意味で やっと気付いた 漏れはきっと end が嫌いなんだ julia> reinterpret(Bool, 1) true julia> reinterpret(Bool, 2) false julia> reinterpret(Bool, 3) true julia> reinterpret(Bool, 4) false julia> reinterpret(Bool, 0) false julia> reinterpret(Bool, -1) true julia> reinterpret(Bool, -2) false ワロス 笑いどころがわからない 配列用でないreinterpretはconvertと違って慎重に使うべきもの julia> reinterpret(Bool, 256) false これは気持ち悪い ……と開発者も思ったらしくv0.5ではエラーになる見込み 間にscheme入ってるならpythonに近い文法に変換するのも簡単に出来るのでは? pythonに近い文法を求めているならpython使えばいいんでは? てかschemeに何の関係が? >>7-11 >>25 >>28 >>30-32 定義はmacro使うと楽 macro c(restype, fnc, argtypes) local args = [symbol("a", n) for n in 1:length(argtypes.args)] quote $(esc(fnc))($(args...)) = ccall($(string(fnc)), $restype, $argtypes, $(args...)) end end @c UInt32 printf (Ptr{Cchar},) @c UInt32 printf (Ptr{Cchar}, UInt32,) printf(pointer(Array{UInt8,1}([65,66,0,67,68,0,0]))) printf("%s\n", pointer(Array{UInt8,1}([65,66,0,67,68,0,0]))) macro m(lib, restype, fnc, argtypes) local args = [symbol("a", n) for n in 1:length(argtypes.args)] quote $(esc(fnc))($(args...)) = ccall(($(string(fnc)), $(Expr(:quote, lib))), $restype, $argtypes, $(args...)) end end @m libcurl Cint curl_free (Ptr{Void},) @m libcurl Ptr{Cchar} curl_getenv (Ptr{Cchar},) @m libcurl Ptr{Cchar} curl_version () v = curl_getenv("TZ") printf(v) curl_free(v) printf(curl_version()) >>9 macro w(lib, restype, fnc, argtypes) local args = [symbol("a", n) for n in 1:length(argtypes.args)] quote $(esc(fnc))($(args...)) = ccall(($(string(fnc)), $(Expr(:quote, lib))), stdcall, $restype, $argtypes, $(args...)) end end @w user32 UInt32 MessageBoxA (UInt32, Ptr{Cchar}, Ptr{Cchar}, UInt32,) MessageBoxA(C_NULL, "hage", "title", 1) >>97-98 32bit 限定のコードを書くべきじゃないな 呼び出すライブラリの仕様は確定しているのだから実用上問題ないのでは? x = UInt32(0x12345678) a = pointer_to_array(convert(Ptr{UInt8}, pointer_from_objref(x)), 4) a[2] = 51 println(@sprintf "%08X" x) # 0x12343378 immutable TT a::UInt16 b::UInt16 end x = UInt32(0x12345678) a = pointer_to_array(convert(Ptr{TT}, pointer_from_objref(x)), 1) println(a) # [TT(0x5678,0x1234)] a[].a = 0xaabb # ERROR: type TT is immutable type XX a::UInt16 b::UInt16 end x = UInt32(0x12345678) # ↑ここまでは動く a = pointer_to_array(convert(Ptr{XX}, pointer_from_objref(x)), 1) # ↑インタプリタ環境だとこれを実行した時点で環境ごと落ちる (下へ行くケースあり) println("reach here") println(a) # インタプリタの外から julia hoge.jl で実行したときは println(a) まで実行すると落ちる なぜでしょう?(unsafeなことしてるのは判ってるのですが・・・) なぜって自分でbitstypeでもimmutableでもないって分かっている書きぶりじゃん その上で聞いているならソース読め へー Julia ってこういう壊れ方するのかー julia> n = UInt32(3) 0x00000003 julia> p = Ptr{UInt32}(pointer_from_objref(n)) Ptr{UInt32} @0x06e474f0 julia> pointer_to_array(p, 1) 1-element Array{UInt32,1}: 0x00000003 julia> UInt32(3) 0x00000003 julia> pointer_to_array(p, 1)[] = 9 9 julia> UInt32(3) 0x00000009 こうなってるのかー 気付かんかったわー julia> e = UInt32(11) 0x0000000b julia> f = UInt32(11) 0x0000000b julia> p = Ptr{UInt32}(pointer_from_objref(e)) Ptr{UInt32} @0x06e47770 julia> pointer_to_array(p, 1) 1-element Array{UInt32,1}: 0x0000000b julia> UInt32(11) 0x0000000b julia> pointer_to_array(p, 1)[] = 17 17 julia> UInt32(11) 0x00000011 julia> f 0x00000011 インタラクティブシェルのヒストリーってどうやったら消せるん? ~/.julia_history 消したら解決しました! Cのunionと同じような機能ってreinterpret以外にないの? transpose と ctranspose って何が違うん? >>112 cはcomplex(複素数)のconjugate >>107-108 julia> 100 100 julia> 100 - 23 77 julia> 100 + 23 123 julia> pointer_to_array(Ptr{Int}(pointer_from_objref(100)), 1)[] = 119 119 julia> 100 119 julia> 100 - 19 119 # ← ここだけ納得いかない julia> 100 + 19 138 納得いかないのが納得いかない "100" - 19 → 119 - 19 →"100" → 119 read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる