質問するログイン新規登録

質問編集履歴

2

df1_dfにリストのまま代入しようとしていた問題を解決(pandasでデータフレームにした)、簡易な表現に変更

2021/03/16 02:32

投稿

hiroki91629
hiroki91629

スコア3

title CHANGED
File without changes
body CHANGED
@@ -6,13 +6,15 @@
6
6
  レーサーの数は3とする。
7
7
 
8
8
  ###目的
9
- なるべく短時間で処理を行たい。
9
+ 複数の並列処理を入れ子構造で動かし、なるべく短時間で処理を行えるようにしたい。
10
10
 
11
11
  ### 知りたい事
12
- 下記コードが進行不可能な理由。
12
+ 下記コードが進行不可能な理由。←解決
13
13
  下記コードを動かす改善方法。
14
14
  他の有効な並列演算方法はあるかどうか。
15
15
  daemonic processesとは何か。
16
+ 追記:プロセッシングしてスレッディングすれば解決の可能性があるかもしれないとの事なので、サンプルコードを組んでいただけると助かります。
17
+ 自身でもやってみます。
16
18
 
17
19
  ###環境
18
20
  google cocolaboratory
@@ -37,24 +39,18 @@
37
39
  def try_def(try_times):
38
40
  count = 3#count:レーサーの数
39
41
  #要素数:countの乱数を生成 = ネズミがゴールするまでにかかった時間(ラップタイム)
40
- rap_time_list = []
42
+ rap_time_list = list()#リストとして初期化
41
43
  for i in range(count):
42
- rap_time_list = rap_time_list + [random.uniform(30,60)]#30~60(秒)の乱数
44
+ rap_time_list.append(random.uniform(30,60))#30~60(秒)の乱数をリストに追加。
43
45
  #rap_time_listをデータフレームにし、0列目にラップタイムを持つデータフレームを作成。
44
- df1_df = rap_time_list
46
+ df1_df = pandas.DataFrame(rap_time_list)
45
- #上記データフレームにレーサー番号をつけたいので、1列目に番号つけてラップタイムと紐ける
47
+ #上記データフレームにレーサー番号をつけたいので、indexを付
46
- df1_df[1] = list(range(count))
48
+ df1_df = df1_df.reset_index()
47
49
  #0列目のラップタイムをソートして数字の小さい順(ゴール早かった順)にソート。
48
50
  df2_df = df1_df.sort_values(by=0)
49
- #レーサー番号も追従してソートされているので、利用して順位を取る。
51
+ #レーサー番号もindexとして追従してソートされているので、利用して順位を取る。
50
- #レーサー番号はdf2_dfの1列目に入っている。
51
52
  for i in range(count):
52
- dummy = df2_df.iat[i,1]
53
- dummy2 = str(dummy)
54
- if i == 0:
55
- race_result = dummy2
56
- elif i > 0:
57
- race_result = result + dummy2
53
+ race_result = [df2_df.iat[i,0] for i in range(count)]
58
54
  return race_result
59
55
 
60
56
  #####レースを任意回数分(race_times回)行って結果リストを作成する関数の定義#####

1

import pandasの追記, 誤:da1_df[1] = list(range(count)) →正:df1_df[1] = list(range(count))

2021/03/16 02:32

投稿

hiroki91629
hiroki91629

スコア3

title CHANGED
File without changes
body CHANGED
@@ -29,7 +29,7 @@
29
29
  ```Python
30
30
  ソースコード
31
31
 
32
-
32
+ import pandas
33
33
  import random
34
34
  from multiprocessing import Pool
35
35
 
@@ -43,7 +43,7 @@
43
43
  #rap_time_listをデータフレームにし、0列目にラップタイムを持つデータフレームを作成。
44
44
  df1_df = rap_time_list
45
45
  #上記データフレームにレーサー番号をつけたいので、1列目に番号をつけてラップタイムと紐付ける。
46
- da1_df[1] = list(range(count))
46
+ df1_df[1] = list(range(count))
47
47
  #0列目のラップタイムをソートして数字の小さい順(ゴール早かった順)にソート。
48
48
  df2_df = df1_df.sort_values(by=0)
49
49
  #レーサー番号も追従してソートされているので、利用して順位を取る。