X



Pythonのお勉強 Part55
■ このスレッドは過去ログ倉庫に格納されています
0685デフォルトの名無しさん
垢版 |
2018/02/06(火) 19:44:00.26ID:AHbr4rI2
>>657
>Numpyを使えばもっと早く計算できるのではないかと思ったのです。

今のところ使わない方が速い その差約2倍!
array化するのに時間かかるからね array化済みならnumpyが爆速だけど
速度アップのためにとわざわざarray化すると遅くなるわけよ
0686デフォルトの名無しさん
垢版 |
2018/02/06(火) 20:30:18.40ID:6Tuhkz2p
>>685
その差2倍って大きいな
やっている処理は激しく単純で時間かからにかもしれないが
実は前処理のarray化に時間が掛かっている可能性あるよな

こんなのはリストを複数部に分けて、それをマルチスレッドでやったほうが良いような感じがするが
0687デフォルトの名無しさん
垢版 |
2018/02/06(火) 20:39:48.44ID:6Tuhkz2p
ちょっとどうなるかやってみた結果
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)にすら負けている
0688デフォルトの名無しさん
垢版 |
2018/02/06(火) 20:42:15.54ID:Yjdsw3bo
リストの要素数5個で比較したらそんなもんでしょ。
5個ならNumpy使う必要ない。

もっと要素数を増やして比べてみたら?
0689デフォルトの名無しさん
垢版 |
2018/02/06(火) 20:52:22.26ID:6Tuhkz2p
>>680の時間測定はリストの要素数5個で比較だったのか...
要素数5個の処理にこんなに時間かかるって、PCが激遅い、Pythonが激遅い
またはその両方が激遅いだな。
0691デフォルトの名無しさん
垢版 |
2018/02/06(火) 21:24:46.21ID:akwhBP1m
俺レベルだと20マンコがいいとこだな
100マンコとかうらやましくもあり
0695デフォルトの名無しさん
垢版 |
2018/02/06(火) 23:29:51.59ID:AHbr4rI2
>>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
>>>
0696デフォルトの名無しさん
垢版 |
2018/02/06(火) 23:47:01.69ID:hBAgagno
>>636
Pyqtで最近測定プログラム作った
Matplotlib使った方が見た目綺麗だけど、pyqtgraphの方が軽いし、速さの追求ができる
0697デフォルトの名無しさん
垢版 |
2018/02/07(水) 01:10:46.36ID:IL95H+4W
>>695
>どうなんでしょ?ってどういうこと?
僕は何もしませんから、僕の代わりにCSVを読み込で行う場合の
numpy版と非numpy版での実評価・考察をしてクレクレと言うことだろう
0698デフォルトの名無しさん
垢版 |
2018/02/07(水) 01:42:47.04ID:+vEZBiPj
>>696
そうなのか...
シミュレーション結果を折れ線グラフにするだけだから,グラフパッケージにこだわりはないんだよね
問題は,そもそもpyqtの構造を理解できていないというところなんだ...
なんちゃってで出来るかと思ったんだけど...また挑戦しようと思います
0700デフォルトの名無しさん
垢版 |
2018/02/07(水) 05:15:50.77ID:LQaGrglb
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
0701デフォルトの名無しさん
垢版 |
2018/02/07(水) 05:25:44.37ID:Hq6Q+E3d
>>680 >>695
oreeは一致率10%未満の時しか速くならない
0704デフォルトの名無しさん
垢版 |
2018/02/07(水) 10:10:37.19ID:mhmm9auu
平等な条件を用意してこうするべきだと思う

>>> 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)
0705デフォルトの名無しさん
垢版 |
2018/02/07(水) 10:17:04.97ID:mhmm9auu
>>781
a = [random.randrange(1,10) for _ in range(1000000)]
b = [random.randrange(1,10) for _ in range(1000000)]
これするだけでも全然逆になるよね
0707デフォルトの名無しさん
垢版 |
2018/02/07(水) 14:57:07.64ID:DnkryU09
>>698
それなら、なおのことpyqtgraphの方がいいかも
僕は実験系だから、装置のコントロールとかも含めてPyqtでGUI作って、リアルタイムプロットを埋め込んだけど
シミュレーション中に何かのタイミングで描き出すとか最後に描き出すなら、pyqtgraphの方が呼び出しが楽だと思う

とりあえずpyqtgraphとpyqtかpysideインスコして、
import pyqtgraph.examples
pyqtgraph.examples.run()
やってみ

サンプルコードが出てくるし、pyqtを露わに使わなくて良いので、コードも書きやすいと思う
0708デフォルトの名無しさん
垢版 |
2018/02/07(水) 16:07:52.51ID:bLqJ09hb
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)
0709デフォルトの名無しさん
垢版 |
2018/02/08(木) 14:42:46.64ID:Ia7szBUl
皆さん、相談させてください。
魔方陣を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を初めた初心者です。
アドバイスお願いします。
0710デフォルトの名無しさん
垢版 |
2018/02/08(木) 15:22:05.43ID:N5nowZC0
random.shuffleをやめてpermutationを使う
0711遊園地
垢版 |
2018/02/08(木) 15:40:37.72ID:Er5ZpABn
魔法陣では無く、
ヒンズーの連続方式です。

縦、横、斜め 全て合計が同じ


一番上の行の一番真ん中に"1"を書きます。
これは奇数x奇数の魔方陣ではどれも同様

斜め右上に数字を書いて行き、ぶつかったら一つ下がるということを繰りかえす


http://d.hatena.ne.jp/shuu33jp/20140423/1398250961
0712デフォルトの名無しさん
垢版 |
2018/02/08(木) 15:47:06.06ID:Ia7szBUl
>>710
ありがとう。
ググってみたけどshuffleと違いがわからなかったです。
どのように使うのですか?
もう少しヒントを下さい。。。

>>711
ありがとう。
そのルールは知ってたのですが、
並び替えして力技でいったほうがコードが簡単そうなので>>709の様なコードになってしまいました^^;
0713デフォルトの名無しさん
垢版 |
2018/02/08(木) 15:54:42.21ID:Ia7szBUl
>>710
あ!すません。。。
NumPyのpermutationではなく
itertoolsのpermutationsを使うんですね!!
なんとなく答えが見えました。
0714遊園地
垢版 |
2018/02/08(木) 16:20:29.27ID:Er5ZpABn
9要素 一致
 362,880通り*合計の確認= 処理数

なんとなく答えが見えました。 (笑)
0715遊園地
垢版 |
2018/02/08(木) 16:23:15.68ID:Er5ZpABn
8かww

362,880通り*8= 1/2903040?wwww
0718遊園地
垢版 |
2018/02/08(木) 16:32:14.33ID:Er5ZpABn
ごめんwww

 計算してないわwww
0719デフォルトの名無しさん
垢版 |
2018/02/08(木) 16:38:16.53ID:Ia7szBUl
9!=362880通り
3*3でもこの数だと。。。
4*4とかになると厳しそうですね。。

>>711のサイトを参考に別のアプローチも考えてみますw
0720遊園地
垢版 |
2018/02/08(木) 16:40:54.68ID:Er5ZpABn
そんなww 事よりコード書くぞwww

00,01,02
10,11,12
20,21,22

3 エラー
ー1エラー
0722デフォルトの名無しさん
垢版 |
2018/02/08(木) 17:02:31.35ID:Ia7szBUl
よく考えると重複を含むランダムで魔方陣を作成する>>709のコードだと
362880回の計算どころじゃすまないですねw
でも意外と早く魔方陣が出力されたので今のPCは凄く計算が早いんですね。

なんか色々と学べた。ありがとう。
0723遊園地
垢版 |
2018/02/08(木) 17:02:45.16ID:Er5ZpABn
何でも無いお?
0724遊園地
垢版 |
2018/02/08(木) 17:08:18.46ID:Er5ZpABn
0,1判断のNoneに+=1 なんてツッコミは面白くない
0725遊園地
垢版 |
2018/02/08(木) 17:10:34.34ID:Er5ZpABn
#下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
0726遊園地
垢版 |
2018/02/08(木) 17:12:29.07ID:Er5ZpABn
降参しまsたwww
0728遊園地
垢版 |
2018/02/08(木) 19:15:14.55ID:Er5ZpABn
なんだw 皆やってるなら俺もやるかww
0729遊園地
垢版 |
2018/02/08(木) 19:26:54.30ID:Er5ZpABn
ヒンニュー連動ぐらい

 1シコ(日)2シコ ぐらいで頑張っちゃおう!!!wwww

なんてぇっなwww
0732遊園地
垢版 |
2018/02/08(木) 20:48:52.66ID:Er5ZpABn
降参

indexでやってるけど、外に出た時のエラーで躓く
範囲外エラーを1つずつ指定して書いてるから拡張性が無いww
0733デフォルトの名無しさん
垢版 |
2018/02/09(金) 21:48:02.77ID:c3bEqQ3n
matplotlibでグラフ出力するときに、数秒ごとのデータが長期間とかあると軸に書かれた日付がまっくろになってしまったりすので、1日ごととか3日ごとのテキスト区切りにしたいのですが、表記方法を教えてください。
0735デフォルトの名無しさん
垢版 |
2018/02/09(金) 22:03:05.20ID:tdu0vLnD
timedelta_rangeか
0736デフォルトの名無しさん
垢版 |
2018/02/10(土) 07:50:02.34ID:zlNupiMk
誰か助けて〜

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を使う事が条件です。
0737遊園地
垢版 |
2018/02/10(土) 08:37:57.88ID:PklGIWAk
import random

marks = [0,1,2,3,4,5]

t=random.choice(marks)
del marks[t-1]

print(marks)
0738デフォルトの名無しさん
垢版 |
2018/02/10(土) 08:44:50.04ID:zlNupiMk
>>737
うわぁ、ありがとう。
でも、そのコードでもforとかで繰り返すとエラーになります。
原因がわからないです。
0739デフォルトの名無しさん
垢版 |
2018/02/10(土) 09:25:14.38ID:JgZ7azQ6
何周かして例えばリストの要素数が5個になった時にchoiceで8が出たら
list_[8]にアクセスするわけで…
0740デフォルトの名無しさん
垢版 |
2018/02/10(土) 09:38:26.17ID:zlNupiMk
ありがとう!!
delの機能を勘違いして使ってました。
そういうことだったのね((泣))
0741デフォルトの名無しさん
垢版 |
2018/02/10(土) 09:51:19.34ID:zlNupiMk
お騒がせしました。
因みに私がやりたかった事は
こんな感じです。
無事解決しました。


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_)
0742遊園地
垢版 |
2018/02/10(土) 10:07:15.25ID:PklGIWAk
全要素取るなら、len() の方が分かりやすい。

for i in range(len(list_)-3): とか

 ってwww つまんない事をいいまひたーーーwww
0744デフォルトの名無しさん
垢版 |
2018/02/10(土) 10:18:07.95ID:2RwyNMOA
そればらdelでもよくね
0745遊園地
垢版 |
2018/02/10(土) 10:22:26.18ID:PklGIWAk
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)
0746遊園地
垢版 |
2018/02/10(土) 10:29:31.98ID:PklGIWAk
return 使ってない問題と 削除した要素のみを表示した事ができない。
0747遊園地
垢版 |
2018/02/10(土) 10:41:32.58ID:PklGIWAk
def Sample02(x):
□return x[x.index(random.choice(x))]

print(Sample02(marks))


だめだww

  誰か頼むwww
0748デフォルトの名無しさん
垢版 |
2018/02/10(土) 10:46:04.61ID:PklGIWAk
def Sample03(x):
del x[x.index(random.choice(x))]


for i in range(len(marks)):
Sample03(marks)
print(marks)
0749遊園地
垢版 |
2018/02/10(土) 10:55:23.26ID:PklGIWAk
-3

引く3
です
0750デフォルトの名無しさん
垢版 |
2018/02/10(土) 11:04:08.00ID:1U0sZUHV
>>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_)
0751遊園地
垢版 |
2018/02/10(土) 11:25:57.18ID:PklGIWAk
やっぱり、単純な方法が良いんかな。

遊園地
1、ランダム取り出し
2,取り出した値のindex
3,delで削除


適当
1、ランダム取り出し
2.for分内でエラー(例外)処理
3.値が無かったら。もしくは、重複したら、(など)pass 何もしない。
0752遊園地
垢版 |
2018/02/10(土) 11:34:08.91ID:PklGIWAk
よしww  全てを単純にしようww

 set(x) - random.choice(x)

だwww
0754遊園地
垢版 |
2018/02/10(土) 11:36:46.41ID:PklGIWAk
s = set([1,2,3])- set([2])
print(s)
0759デフォルトの名無しさん
垢版 |
2018/02/10(土) 15:20:01.50ID:PnT7PCdn
そんな有名人と会話できるなんて感激だ
0760遊園地
垢版 |
2018/02/10(土) 16:45:57.94ID:PklGIWAk
ちょwww お前らwww

 悪いのが頭じゃなくてwww 性格で良かったなwwww
0761遊園地
垢版 |
2018/02/10(土) 16:46:24.76ID:PklGIWAk
まったく。

 裏山wwwンゴコごごごごwwww
0762デフォルトの名無しさん
垢版 |
2018/02/10(土) 17:05:34.01ID:9Ur4h2hf
遊園地は日々pythonお助けマンとして色々なところで多大に貢献しているから
pythonをやっているなら知らない人はいないだろ
0764遊園地
垢版 |
2018/02/10(土) 17:09:47.05ID:PklGIWAk
NGなら俺の投稿は写ってないなww
次の問題はwwテラテイルの俺を防ぎきれてるか、どうかだなww
0765デフォルトの名無しさん
垢版 |
2018/02/10(土) 17:24:10.85ID:9Ur4h2hf
>>763
遊園地が来る所に来ると遊園地化する奴
遊園地のコードを見て自分のコードがひどすぎと感じて自分が嫌に奴
がいるからNGにするのはそうならないために良い方法
5chのpythonスレには遊園地の影響を多大に受けている連中多いからな(手遅れ)
0767デフォルトの名無しさん
垢版 |
2018/02/11(日) 00:51:11.99ID:+IrRT57i
“2017-03-12”
こういうので03のみを抽出する正規表現ってどう書いたらいいんでしょうか?
0771遊園地
垢版 |
2018/02/11(日) 01:09:31.65ID:RRTIuu7j
正解っぽいのが出てるのでww 駄目な奴なwww

a="2017-03-12"
b=a.split('-')
print(b[1])
0772デフォルトの名無しさん
垢版 |
2018/02/11(日) 01:48:28.74ID:+IrRT57i
>>770
ありがとうございます。いけました
ところで色々試してみたんですが
data="2017-03-12"
m=re.search(r'\-([\d]+)\-',data)
m.group(1)
とかでも大丈夫だったんですが、
提示されたコードはどういう意図で書かれたんでしょうか(申し訳ない。初心者なもので、ざっくりした書き方だと意味を拾いきれない…
0773恥人
垢版 |
2018/02/11(日) 01:51:46.70
>>771
これでいいな ww
0775デフォルトの名無しさん
垢版 |
2018/02/11(日) 04:11:17.74ID:Iondwd8k
>>772
769じゃないけどそれだとaaa-12-bbbみたいな文字列も引っ掛けてしまう。
万全を期すなら
(?!\d)\d{4}-(\d{2})-\d{2}(?!\d)
とかかな
0776デフォルトの名無しさん
垢版 |
2018/02/11(日) 07:54:22.60ID:yycdgIeY
/\d+-(\d+)-\d+/ =~ "2017-03-12"

$1 #=> "03"

Ruby では正規表現を、/ / で囲む。
\d は、0〜9の数字で、+ は、直前の文字が1つ以上。
( ) でキャプチャして、$数字で、それを取り出せる

数字が1つ以上、-、(数字が1つ以上)、-、数字が1つ以上
0779デフォルトの名無しさん
垢版 |
2018/02/11(日) 13:41:54.98ID:LVepRKww
>>775
それって電話番号が先頭にあっても使える?
0780遊園地
垢版 |
2018/02/11(日) 15:51:39.48ID:RRTIuu7j
data="電話番号2017-03-12"

と言う、しょーもないネタを誰かがやると思ってたのに、
暇な遊園地がやるとはww
0782デフォルトの名無しさん
垢版 |
2018/02/12(月) 03:22:30.25ID:o/Mrpt/0
パイソンの習得難度が1だとしたら機械学習やディープラーニングの難度ってどれくらいなの?

あとAI独習やパイソン独習系でオススメのブログとかニュースメディアある?エンジニアならみんなこれ読んでるみたいな

FEEDLYで登録しときたいんだが
0783デフォルトの名無しさん
垢版 |
2018/02/12(月) 04:53:02.69ID:mwueXHhJ
Pythonは小学生でも理解できるが
機械学習で成果を得るならコンピューターサイエンスの学位を持ってるくらいが最低ライン
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況