Pythonのお勉強 Part55
■ このスレッドは過去ログ倉庫に格納されています
っと 思ったけど、import time挟んだら、実際の測定は遅いだなw https://ideone.com/vN3ZZN >>657 >Numpyを使えばもっと早く計算できるのではないかと思ったのです。 今のところ使わない方が速い その差約2倍! array化するのに時間かかるからね array化済みならnumpyが爆速だけど 速度アップのためにとわざわざarray化すると遅くなるわけよ >>685 その差2倍って大きいな やっている処理は激しく単純で時間かからにかもしれないが 実は前処理のarray化に時間が掛かっている可能性あるよな こんなのはリストを複数部に分けて、それをマルチスレッドでやったほうが良いような感じがするが ちょっとどうなるかやってみた結果 omae time = 0.11590, return = 0.50740 oree time = 0.04688, return = 0.50740 oree2 time = 0.05340, return = 0.50740 yuenchi time = 0.06901, return = 0.50740 array化して処理したomaeは>>683 の超ストレートなやり方(yuenchi)にすら負けている リストの要素数5個で比較したらそんなもんでしょ。 5個ならNumpy使う必要ない。 もっと要素数を増やして比べてみたら? >>680 の時間測定はリストの要素数5個で比較だったのか... 要素数5個の処理にこんなに時間かかるって、PCが激遅い、Pythonが激遅い またはその両方が激遅いだな。 俺レベルだと20マンコがいいとこだな 100マンコとかうらやましくもあり >>685 そうなんですか! CSVを読み込む場合はどうなんでしょうか? >>693 どうなんでしょ?ってどういうこと? numpyから読み込めばarray型で取得できるみたいだよ ファイルからの読込含めて処理速度がどなるかってこと? どうなんでしょうね?ファイル読込速度が同じなら当然oree2が最速だろうし、 np.loadtxtのファイル読込速度が爆速なら巻き返せるし・・ おもしろ実験やってみてください! >>> import numpy as np >>> data = np.loadtxt('test.csv',delimiter=',') >>> data array([[ 1., 2., 3., 4., 5.], [ 1., 2., 3., 5., 4.]]) >>> a = data[0]; b = data[1] >>> np.sum(a==b) / a.size * 100 60.0 >>> >>> from itertools import zip_longest >>> import csv >>> with open('test.csv') as f: ____reader = csv.reader(f) ____data = [row for row in reader] ____a = data[0]; b = data[1] ____same = [1 for v1,v2 in zip_longest(a,b) if v1==v2] ____len(same)/max(len(a), len(b)) * 100 60.0 >>> >>636 Pyqtで最近測定プログラム作った Matplotlib使った方が見た目綺麗だけど、pyqtgraphの方が軽いし、速さの追求ができる >>695 >どうなんでしょ?ってどういうこと? 僕は何もしませんから、僕の代わりにCSVを読み込で行う場合の numpy版と非numpy版での実評価・考察をしてクレクレと言うことだろう >>696 そうなのか... シミュレーション結果を折れ線グラフにするだけだから,グラフパッケージにこだわりはないんだよね 問題は,そもそもpyqtの構造を理解できていないというところなんだ... なんちゃってで出来るかと思ったんだけど...また挑戦しようと思います NumPyが遅かったらCuPy使えばいい Pythonが遅かったらCython使えばいい Ruby で作った。 count で、ブロックの戻り値が真のものを数える aryA = [1, 2, 3, 4, 5] aryB = [1, 2, 4, 3, 5] count = aryA.each_with_index.count { |num, idx| num == aryB[idx] } puts count / aryA.length.to_f #=> 0.6 >>680 >>695 oreeは一致率10%未満の時しか速くならない >>700 それだったらzip使ったほうがきれいなような count = aryA.zip(aryB).count { |i, j| i == j } 平等な条件を用意してこうするべきだと思う >>> import time, random; import numpy as np; from itertools import zip_longest >>> def oree(a,b): same = [True for v1,v2 in zip_longest(a,b) if v1==v2] return len(same)/max(a.size, b.size) * 100 >>> def omae(a,b): return np.sum(a==b) / a.size * 100 >>> def timer(func, *args): start = time.time() r = func(*args) end = time.time() print(f'{func.__name__} time = {end - start:.5f}, return = {r:.5f}') >>> def test(func1, func2): a = np.array([random.randrange(1,200) for _ in range(1000000)]) b = np.array([random.randrange(1,200) for _ in range(1000000)]) timer(func1, a, b); timer(func2, a, b) a = np.array([_ for _ in range(1000000)]) b = np.array([_ for _ in range(1000000)]) timer(func1, a, b); timer(func2, a, b) >>> test(oree, omae) >>781 a = [random.randrange(1,10) for _ in range(1000000)] b = [random.randrange(1,10) for _ in range(1000000)] これするだけでも全然逆になるよね >>698 それなら、なおのことpyqtgraphの方がいいかも 僕は実験系だから、装置のコントロールとかも含めてPyqtでGUI作って、リアルタイムプロットを埋め込んだけど シミュレーション中に何かのタイミングで描き出すとか最後に描き出すなら、pyqtgraphの方が呼び出しが楽だと思う とりあえずpyqtgraphとpyqtかpysideインスコして、 import pyqtgraph.examples pyqtgraph.examples.run() やってみ サンプルコードが出てくるし、pyqtを露わに使わなくて良いので、コードも書きやすいと思う a = [random.randrange(1,200) for _ in range(10000)] b = [random.randrange(1,200) for _ in range(10000)] print(np.linalg.matrix_rank(np.diag(a) - np.diag(b)) / a.size * 100) 皆さん、相談させてください。 魔方陣を5個吐き出すプログラムを作ったのですが、 import random abc=[1,2,3,4,5,6,7,8,9] count=0 while count<5: ____random.shuffle(abc) ____if abc[0]+abc[1]+abc[2]==15 and abc[3]+abc[4]+abc[5]==15 and abc[6]+abc[7]+abc[8]==15\ and abc[0]+abc[3]+abc[6]==15 and abc[1]+abc[4]+abc[7]==15 and abc[2]+abc[5]+abc[8]==15\ and abc[0]+abc[4]+abc[8]==15 and abc[2]+abc[4]+abc[6]==15: ________print(abc[0],abc[1],abc[2]) ________print(abc[3],abc[4],abc[5]) ________print(abc[6],abc[7],abc[8]) ________count=count+1 ________print(count) ________print("------") 同じ魔方陣を重複して出力してしまう事があります。 これを解決する方法はありませんか? そもそもランダムで並び替えするって発想自体が邪道なんですかね。 僕は最近Pythonを初めた初心者です。 アドバイスお願いします。 random.shuffleをやめてpermutationを使う 魔法陣では無く、 ヒンズーの連続方式です。 縦、横、斜め 全て合計が同じ 一番上の行の一番真ん中に"1"を書きます。 これは奇数x奇数の魔方陣ではどれも同様 斜め右上に数字を書いて行き、ぶつかったら一つ下がるということを繰りかえす http://d.hatena.ne.jp/shuu33jp/20140423/1398250961 >>710 ありがとう。 ググってみたけどshuffleと違いがわからなかったです。 どのように使うのですか? もう少しヒントを下さい。。。 >>711 ありがとう。 そのルールは知ってたのですが、 並び替えして力技でいったほうがコードが簡単そうなので>>709 の様なコードになってしまいました^^; >>710 あ!すません。。。 NumPyのpermutationではなく itertoolsのpermutationsを使うんですね!! なんとなく答えが見えました。 9要素 一致 362,880通り*合計の確認= 処理数 なんとなく答えが見えました。 (笑) 8かww 362,880通り*8= 1/2903040?wwww 9!=362880通り 3*3でもこの数だと。。。 4*4とかになると厳しそうですね。。 >>711 のサイトを参考に別のアプローチも考えてみますw そんなww 事よりコード書くぞwww 00,01,02 10,11,12 20,21,22 3 エラー ー1エラー >>720 すいません。 わかりません。 それはなんですか。 よく考えると重複を含むランダムで魔方陣を作成する>>709 のコードだと 362880回の計算どころじゃすまないですねw でも意外と早く魔方陣が出力されたので今のPCは凄く計算が早いんですね。 なんか色々と学べた。ありがとう。 0,1判断のNoneに+=1 なんてツッコミは面白くない #下wwww def click_down(brave_x,brave_y): return brave_x, brave_y+1 # 右上 def click_up01(brave_x,brave_y): return brave_x+1, brave_y-1 駄目だだぁああwwww ヒンニュー連動ぐらい 1シコ(日)2シコ ぐらいで頑張っちゃおう!!!wwww なんてぇっなwww なんか僕には何をしてるのかわからない。 分析してみます。 >>727 すごい! n*nの魔方陣を出力できるんっすね! 降参 indexでやってるけど、外に出た時のエラーで躓く 範囲外エラーを1つずつ指定して書いてるから拡張性が無いww matplotlibでグラフ出力するときに、数秒ごとのデータが長期間とかあると軸に書かれた日付がまっくろになってしまったりすので、1日ごととか3日ごとのテキスト区切りにしたいのですが、表記方法を教えてください。 DataFrameならdate_rangeとかにしとくと勝手に間引いてくれてる気がする 誰か助けて〜 from random import choice list_ = [0,1,2,3,4,5,6,7,8] for i in list_: ____place = choice(list_) ____del(list_[place]) ____print(list_) リストからランダムで一つずつ要素を削除するプログラムを作りたいのですがエラーがでます(汗) IndexError: list assignment index out of range ↑これです(泣) もうかれこれ5時間格闘中です。 リストからの選択は必ずchoiceを使う事が条件です。 import random marks = [0,1,2,3,4,5] t=random.choice(marks) del marks[t-1] print(marks) >>737 うわぁ、ありがとう。 でも、そのコードでもforとかで繰り返すとエラーになります。 原因がわからないです。 何周かして例えばリストの要素数が5個になった時にchoiceで8が出たら list_[8]にアクセスするわけで… ありがとう!! delの機能を勘違いして使ってました。 そういうことだったのね((泣)) お騒がせしました。 因みに私がやりたかった事は こんな感じです。 無事解決しました。 from random import choice list_ = [0,1,2,3,4,5,6,7,8] for i in range(9): ____place = choice(list_) ____list_.remove(place) ____print(list_) 全要素取るなら、len() の方が分かりやすい。 for i in range(len(list_)-3): とか ってwww つまんない事をいいまひたーーーwww 参考にさせていただきます。 -3はなんですか??? import random marks = [0,1,2,3,4,5] def Sample01(): □del marks[marks.index(random.choice(marks))] for i in range(len(marks)): Sample01() print(marks) return 使ってない問題と 削除した要素のみを表示した事ができない。 def Sample02(x): □return x[x.index(random.choice(x))] print(Sample02(marks)) だめだww 誰か頼むwww def Sample03(x): del x[x.index(random.choice(x))] for i in range(len(marks)): Sample03(marks) print(marks) >>741 そのコードだとlist_に重複があったときに 必ず重複した要素のうちの先頭の要素が取り出されてランダム性に偏りが出そうなのが気になる list_に重複がないという前提があるなら問題ないけど from random import choice list_ = [0, 1, 2, 3, 4, 5, 6, 7, 8] for _ in range(9): ____place = choice(range(len(list_))) ____list_.pop(place) ____print(list_) やっぱり、単純な方法が良いんかな。 遊園地 1、ランダム取り出し 2,取り出した値のindex 3,delで削除 適当 1、ランダム取り出し 2.for分内でエラー(例外)処理 3.値が無かったら。もしくは、重複したら、(など)pass 何もしない。 よしww 全てを単純にしようww set(x) - random.choice(x) だwww s = set([1,2,3])- set([2]) print(s) >>750 ありがとう。 重複がある場合問題になるんですか! pop使ってみます。 ちょwww お前らwww 悪いのが頭じゃなくてwww 性格で良かったなwwww 遊園地は日々pythonお助けマンとして色々なところで多大に貢献しているから pythonをやっているなら知らない人はいないだろ NGなら俺の投稿は写ってないなww 次の問題はwwテラテイルの俺を防ぎきれてるか、どうかだなww >>763 遊園地が来る所に来ると遊園地化する奴 遊園地のコードを見て自分のコードがひどすぎと感じて自分が嫌に奴 がいるからNGにするのはそうならないために良い方法 5chのpythonスレには遊園地の影響を多大に受けている連中多いからな(手遅れ) teratail? ああ例のゴミか… …ゴミはja.stackoverflowだって? そう違いはないよ “2017-03-12” こういうので03のみを抽出する正規表現ってどう書いたらいいんでしょうか? >>733 ax.set_xticks() ax.set_xticklabels() で置き換える 正解っぽいのが出てるのでww 駄目な奴なwww a="2017-03-12" b=a.split('-') print(b[1]) >>770 ありがとうございます。いけました ところで色々試してみたんですが data="2017-03-12" m=re.search(r'\-([\d]+)\-',data) m.group(1) とかでも大丈夫だったんですが、 提示されたコードはどういう意図で書かれたんでしょうか(申し訳ない。初心者なもので、ざっくりした書き方だと意味を拾いきれない… >>772 769じゃないけどそれだとaaa-12-bbbみたいな文字列も引っ掛けてしまう。 万全を期すなら (?!\d)\d{4}-(\d{2})-\d{2}(?!\d) とかかな /\d+-(\d+)-\d+/ =~ "2017-03-12" $1 #=> "03" Ruby では正規表現を、/ / で囲む。 \d は、0〜9の数字で、+ は、直前の文字が1つ以上。 ( ) でキャプチャして、$数字で、それを取り出せる 数字が1つ以上、-、(数字が1つ以上)、-、数字が1つ以上 >>775 それって電話番号が先頭にあっても使える? data="電話番号2017-03-12" と言う、しょーもないネタを誰かがやると思ってたのに、 暇な遊園地がやるとはww >>775 ああ、なるほど。理解できました ありがとうございます パイソンの習得難度が1だとしたら機械学習やディープラーニングの難度ってどれくらいなの? あとAI独習やパイソン独習系でオススメのブログとかニュースメディアある?エンジニアならみんなこれ読んでるみたいな FEEDLYで登録しときたいんだが Pythonは小学生でも理解できるが 機械学習で成果を得るならコンピューターサイエンスの学位を持ってるくらいが最低ライン ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる