くだすれPython(超初心者用) その36
■ このスレッドは過去ログ倉庫に格納されています
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。 エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。 騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。 次スレは >>985 辺りで 前スレ くだすれPython(超初心者用) その35 http://mevius.5ch.net/test/read.cgi/tech/1496411341/ VIPQ2_EXTDAT: checked:default:1000:512:----: EXT was configured >>532 事務系社会人です。独学なので宿題ではないです。自分用の簡単なツールを作りたいというのがきっかけです。 始めはnumpyで、行列内部で要素の演算させるつもりでしたが、うまくできませんでした。 次にpandasで、表形式でやろうとしましたが、今一わかりません。 すみません、今日の夜にでも、不完全な自分のコード提示します。 お目通しいただきご教示くださるとありがたいです。 >>524 Juliaを中学生から教えたらいい。sympy使えるし。 >>538 あれは言語というよりオーサリングツールな気がするな >>535 目的を人間っぽく書いて、その為の実現したいコード処理を記載 読み込んだデータ形式も簡易表現で構わないから、コードにコメント等で書いて。 numpyで、行列内部で要素の演算 どの様な演算なのか? 受け取るデータ形式は、どの状態なのか? 何が想定と違うのか? pandasで、表形式 どの様な表なのか? 上記と同じ コード書きや想像可能な命令後のキーワド検索は、後回し。 なんかnumpyって使いにくいのよね 全部pandasでやっちゃう 計算速度とかは知らん >531 こんな感じかな? https://ideone.com/mxwgP3 numpy panda なら、groupby?とかの集計用の関数を使うのだろうけど、 どちらも知らないので、素のpythonで書いた。 before_data = [[100,50,250,300], [101,20,150,150], [101,30,200,150], [102,80,100,200], [102,20,150,200]] hashed_data = before_data.group_by { |row| row[0] } #=> {100=>[[100, 50, 250, 300]], 101=>[[101, 20, 150, 150], [101, 30, 200, 150]], 102=>[[102, 80, 100, 200], [102, 20, 150, 200]]} # 配列の蓄積器に、結果を入れながら、処理を繰り返す result = hashed_data.each_with_object([]) do | (key, rows), ary | if rows.length >= 2 puts "rows" p rows # 配列の蓄積器に、結果を入れながら、処理を繰り返す r = rows.each_with_object([]) do | row, ary2 | if ary2.length == 0 ary2.push *row # 展開 ary2[2] = row[1] * row[2] else ary2[1] += row[1] ary2[2] = ary2[2] + row[1] * row[2] end end r[2] = r[2] / r[1].to_f ary.push r else ary.push rows.flatten end end p result Ruby で作った。結果 [[100, 50, 250, 300], [101, 50, 180.0, 150], [102, 100, 110.0, 200]] プログラミングのレポート課題としていいテーマありますか? 2週間くらいで0から理解できる内容で 機械学習とか候補に入ってるんですが2週間じゃキツイですか? >>546 1. ユーザーが入力した何らかの文字列を受け取る 2. 1. の文字列が以前までに入力されたものと同じなら、そのときの回答と同じ回答を表示する 3. そうでない場合は、回答をユーザーに入力させ、入力内容を回答としてそのまま表示する これで教師データに対しては精度100%のAIができる 2週間ならこんなもんだろ 今日からpythonを勉強し始めました ここのfibo()関数が、fibo(37)ぐらいで恐ろしく時間がかかる(10秒ぐらい)んですが、 こんなものなんでしょうか?あまりに遅すぎると思うのですが。。。 試しにcで書き直したらfibo(37)が一瞬で終わりました。 環境:Windows10上のWSL+Ubuntu上のpython3.5.2、CPU corei7 https://qiita.com/Wreulicke/items/e8f7290f6b4ff98e6142 数千万回の関数呼び出ししてるから、Pythonなら10秒くらいで正常。 100万回の単純な演算なら、1秒以内でいける。 1000万回の演算だと、かなり単純なのでも、1秒以内は厳しい、というのが相場かな。 cやc++よりは、50倍くらい遅いよ。 >>550 あーそうなんですね! pythonは科学計算ではなくテキスト処理?とか ぱっと簡単に処理を書くのに向いてそうですね ありがとうございました! 俺のPCだとフィボナッチ計算 Pythonでも0.1秒くらいで終わるけど。。。 しかも、CPU corei5のオンボロなんだけどw どういうことやw >551 科学計算するときは、numpy使うらしい。 >552 速いPC使ってるんだね。 うちのi7 では13.5秒かかった。 アルゴリズムを変えて、メモ化したり、ループに書き直したりすれば、一瞬で終わるけど。。 >>554 あ、すまん >>549 のURL見てなかった 自分で勝手に関数作ってたわw でも、URLの関数使っても3秒くらいで終わったわ >553 corei3なの? ideone.com で、pypy2.7で計算したら、0.56 secまで速くなったけど、0.1 sec には届かない。 リンク先のコードと違うので計算したのでは? >555 行き違い失礼。 速度差は、デスクトップとノートPCの違いかな? あぁ、末尾再帰とか、lazyとかね、昔はよくやったよね懐かしいわw まあ今は機械学習が全盛だし、もう末尾再帰とか、lazyとかの時代じゃないっしょw 末尾再帰はみみっちい、男らしくない考え。 そんなんだったら最初からforループ使っとけ Jupyterから実行したかどうか判定する方法ってあります? >>563 お前答えられへんだけやんけwww ちなみに、俺は知らん >>562 Jupyterを起動 print("Hello World") と入力 Hello World と表示されればJupyterはちゃんと動作してるよ >>564 知らないのはお前、俺、>>562 ぐらいだろう このスレの連中は遊園地を筆頭に人間性に大問題ある奴ばかりなために 知っているが教えない奴が圧倒的。pyスレに来る目的が基地ル、雑談するためだからな PythonやりたいならwindowsよりLinuxですか? >>567 何を作りたいかでかわってくる それがないならどっちでもいいんじゃないですかね >>568 githubでソース拾ってきて動かしたいです。 >>542 様 ご面倒をおかけしました。 ありがとうございました。 コードの中身をよく拝見させていただき、 これからpythonを勉強する励みにいたします。 ありがとうございました。 >>540 遊園地様 >>542 様が回答を示していただきましたが、下記のとおり 私のポンコツコードを示したいと存じます。 再掲 [100,50,250,300] [101,20,150,150] [101,30,200,150] [102,80,100,200] ・ ・ 目的 ・ 1列目:商品コード、2列目:数量、3列目:仕入金額(単価)、1列目:販売金額(単価)です。 上記例では、数字を単純化しています。また実際は、重複含め100以上のデータ(行)があります。 ・ 重複している商品コードを整理し、その場合、数量の合算、金額(単価)の加重平均を行い、 最終的に、きれいな行列に整理したい。 ・ データはCSVで与えられている。 ・ Excel上で計算やVBAも使用できるだろうが、CSVのデータを取込み、pythonの中?で計算して、結果を出してみたかった。 以下、連投します。すみません。 #coding: UTF-8 import pandas as pd import numpy as np nan = float("nan") #データ読込 data = np.loadtxt('data.csv',delimiter=',',dtype='float',skiprows=0) #データ全体を読込 data_code = data[:,0] #データ全体から「商品コード」部分を取出す df1 = pd.DataFrame( {'CD': data[:,0], 'quantity':data[:,1], '@': data[:,2]}, columns=['CD', 'quantity', '@']) print(df1) # とりあえず、表みたいな形式になるか確認してみた data_code = np.array(data_code.reshape(len(data_code),)) # 商品コードの重複を削除してみた print(data_code) # ここから重複のない純粋な商品コードをkeyにして、そもそものデータ全体を対象に、上から回して行って、 Excelのvlookup関数のような感じで、2列目、3列目の数字を取出し、目的の演算を行おうとしていた。 質問では、1行4列の行列が、nあるとしましたが、本当はCSV全体で1つの行列になると思いましたので、 numpyを使って、重複を発見したときに、i行2列、同3列の数値を取出し、目的の演算をしようと初め思っていました。 しかし、行列の内部での要素の取出しが今一つわかりませんでした。(初心者用の本しか持っておらず、ネット頼りでしたが 必要な情報を見つけられませんでした。 それで、表形式になるpandasのDataframeを用いてみましたが、重複除きの商品コードから、 当該の行データを取出し、同様に2列目、3列目の数値を用いて演算させるのがわかりませんでした。 かなり自分でも能力が足りないのに、欲張っていたかと思います。 反省いたします。 機械学習に興味関心がありますので、今後、pythonの勉強を頑張りたいです。 ご迷惑でなければ、また皆様にご教示いただきたいです。 行列の大きさ次第では計算量がすごいことなるで メモリとか時間を気にせんのと、初心者っぽくやるなら、numpyのuniqueをまず使ってループ回すかな >>571 最初からその説明(具体的な処理目的説明)していたら展開が違ったような気がする 俺なら 重複している商品コードを整理し 全データ(100以上のデータ)で重複している商品コードを洗い出す処理をして {101:[20,150,150], [30,200,150]} <= valueが2個以上なら重複とわかる とかを生成して、 これ(商品コード101)に対して数量の合算、金額(単価)の加重平均を行うような処理にするが import numpy as np a=np.array([0,1,2,3,4,5]) b=np.array([0,1,2,3,4,6]) print(np.sum(a == b)) >>5 numpyを使って2つの配列の要素が一致している個数を求めました。 配列が2つの場合は上のコードで求まるのですが、 下の様に3つの配列がある場合、全ての配列の要素が一致する個数を求める場合はどうすればよいのでしょうか? a=np.array([0,1,2,3,4,5]) b=np.array([0,1,2,3,4,6]) c=np.array([4,1,2,3,4,5]) >>4 できるだけ、forやifなどを使わない簡単な方法を探しております。。。 よろしくお願いします。 >576 numpyは使ったことないから、リファレンス見ながら適当に書いた。 a==b==cだとエラーになるので、a==bとb==cをlogical_andでつないだら動いた。 print(np.sum(np.logical_and(a == b, b == c))) >>579 ありがとうございます。 自分も a==b==c でエラーがでて困ってました。 とても助かりました。 >>577 forやif使う方が(作るのは)簡単なんだけど… お前、自分でどうにかする気全くないってことじゃん (作るのは) どこでこんな括弧の使い方教えとんねんwww は?お前Pythonスレで何言ってんの? 作るのはって引数に決まってんじゃん 思った以上に難しいな。 発狂モードで、人から聴きながら、公式ドウキュメントと睨めっこ してるけど、未だに熟考してるな。 defaultdict items() https://ideone.com/rbwrKz >>581 forやifを使う方法なら自分でも分かるので。。。 コードがシンプルで動作が早いものを求めてました。 賢いあなたなら素晴らしい解決策をご存知では? 結合前のindexが有るから適当に逆算して。 データが最後まで欲しいなら んぐぅうううーーー :: defaultdict lambda enumerate append a=set(a) ; b=set(b) ; c=set(c) print(len(list(a&b&c))) これじゃあかんのか? おちんぽっぽ おちんぽっぽ ぶひひいいいいいいいいいいいいいいいい l=[[100,50,250,300],[101,20,150,150], [101,30,200,150],[102,80,100,200]] r=[] for i in l: □r.append(['ID_'+str(i[0]),i[1:3]]) from collections import defaultdict d = defaultdict(lambda :[[], []]) for i, j in enumerate(r): □d[j[0]][0] += [j[1]] □d[j[0]][1] += [i] for key in sorted(d): □print(key,d[key]) エクセル仕様の縦配列ならpandasなんだけどなー。 l=[[100,50,250,300],[101,20,150,150], [101,30,200,150],[102,80,100,200]] 1列目:商品コード 2列目:数量 3列目:仕入金額(単価) 4列目:販売金額(単価) print(list(zip(*l))) [(100, 101, 101, 102), 商品コード (50, 20, 30, 80), 数量 (250, 150, 200, 100), 仕入金額(単価) (300, 150, 150, 200) 販売金額(単価)] import pandas as pd df = pd.DataFrame( { 'id':['ID_100','ID_101','ID_101','ID_102'], '数量':[50,20,30,80], '仕入金額_単価':[250,150,200,100], '販売金額_単価':[300,150,150,200] } ) print(df) キーワードに関する文法を覚えて、高校までの数学A,B,C &適当なフレームワークとモジュール 基本の文法が理解できてるなら、 >>591 の解説を俺の代わりにしといてクレ |д゚)チラッ □ は インデント 遊園地さんへ defaultdictにlambdaを渡せば、長さ固定で0初期化したリストを初期値に出来るっていうのは、初めて知りました。 参考にして作ったコードが、こちらです。 https://ideone.com/Y8yQsm 中途半端な数学とあやふやな日本語表記だったから、もっとできない奴だと思ってた。 遊園地 より お前の方が 上だな。 通常運営に戻るかwww おちんぽっぽ おちんぽっぽ ぶひひいいいいいいいいいいいいいいいいwwwwww ( ゚д゚)ハッ! ┌(_Д_┌ )┐ ( ゚д゚)ハッ! ┌(_Д_┌ )┐ ヘ(゚∀゚ヘ)アヒャ φ(..)メモメモ >>562 は煽りのおかげで自己解決しました サンクス >>600 煽って欲しくなったらまたいつでも来な 俺達はいつもここに居るぜ (ずっと初心者のままって事だから)「居たら駄目だろw」 Pyton始めて触ったけどなんか楽しい C#は凄くつまらないけどこれはなんか楽しい 残念ながらPython使いにはC#好きが多いらしいぞ つまり君はPythonに向いてない可能性がある コンパイルや型宣言が迂遠に思うとかなら型宣言のなさが口惜しくなる時も… (制約は実行時チェックだから遅くなるし、numbaとかはimportコスト高いし でも日曜プログラミングには最適。C#はお堅すぎてC++の方が好きだが、開発効率でC# pycharmでプログラム書いて、 後から弄ってたりすると、 失敗することが多いのですが、 失敗する前には、戻せないですよね、 書いたプログラムを、万一に備えてバックアップとかしてますか? バックアップする場合はどうやるといいでしょうか? 任意の開発環境のテキストエディター 右クリックで[元に戻す] もしくは、メニューから戻れよな。 >>607 ありがとお、 英語だから読めなかったけど、 ツールバーのEditのところに、 Undoっていのあって、押してみたら元に戻った、 PC壊れた時のための、 バックアップとかはしなくても、大丈夫かな? pycharm って日本語化プラグイんがあったはずだからそれ入れてみたら? もちろん自己責任で って言うか、初心者ならIDLE でいいと思うけどなぁ 昨日pythonをはじめたばかりの俺が言うのも何だけど IDLEはリドゥの機能が最低限文化的な水準じゃないすぎると思うの >>608 このスレの経験が長い俺から一言だけ助言させてもらうけど 5chでgit勧めるやつはキチガイかバカだから>>612 は無視する事を勧める >>606 Pythonに限らず、プログラミングではバージョン管理するものだと思う 個人で開発する分にはgitでもsubversion でも好きなの使えばいいと思うよ >>617 超初心者スレでわけのわからんもん勧めるなキチガイ >>621 世の中の99%のコードはバージョン管理など必要ない Pythonの関数やライブラリもよう覚えられんのに gitのコマンドなんか覚えてる暇ないわ デバックのこと考えるとVisual Studio が使いやすいな まあ慣れてるだけかもしれんが 型宣言があったほうが他人のコードは読みやすい pythonでコード書くなら変数の型が予想付きやすいようにコードを書くべきではある 等と発言しているが、作業所はゴミ箱のpythonふぁいる 変数名は、unko_A001 unko_B002 geri_a___ hoge hage などを多様 そして、全てローカル定数[任意]だなww うんこ あ お お イ unko_A001 うんこ ぶ おお とぅ!! unko_B002 げり あ!(はっ?) geri_a___ ほげ hoge はげ hage >>621 5chのpythonスレに来る連中はバージョン管理が必要なレベルにない奴が圧倒的に多いだろ なんせ超初心者レベルなんだから gitぐらい使えないと初心者のうちはいいけど伸びしろないぞ >>630 じゃあいいんじゃん 初心者だもの 人間だもの ここにいる人の大半は多分GitとGithubの違いが分かってない (質問する超初心者側の)大半は多分GitとGithubの違いが分かっていない ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる