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

回答編集履歴

2

コメント追加

2018/06/11 11:17

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -17,6 +17,9 @@
17
17
  lst
18
18
 
19
19
  def f1(a,b,c,d):
20
+ """私が考えた方式。一列ずつ見て、削っていきます
21
+ こうすると比較の回数がケチれて(本質的には短絡評価と同じことをしています)速いはずです
22
+ """
20
23
  tmp = A
21
24
  for i, eqv in enumerate([a,b,c,d]):
22
25
  tmp = tmp[tmp[:,i] == eqv]

1

質問者様の方式も追加

2018/06/11 11:17

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -6,9 +6,17 @@
6
6
 
7
7
  A = np.arange(50000).reshape((10000, 5))
8
8
 
9
+ def f0(a,b,c,d):
10
+ """質問文の方式
11
+ """
12
+ lst = []
13
+ for i in A:
14
+ if i[0] == 1 and i[1] == 2 and i[2] == 3 and i[3] == 4:
15
+ lst.append(i[4])
16
+ # print(lst)
17
+ lst
18
+
9
19
  def f1(a,b,c,d):
10
- """mkgreiさんの方式だと.all以前が律儀にすべて計算されて遅いと思ったので、こうしてみました
11
- """
12
20
  tmp = A
13
21
  for i, eqv in enumerate([a,b,c,d]):
14
22
  tmp = tmp[tmp[:,i] == eqv]
@@ -23,6 +31,14 @@
23
31
  # print(A[idx, -1])
24
32
  A[idx, -1] # 計測時にprintしたくなかったので
25
33
 
34
+ print(timeit.timeit(lambda : f0(0,1,2,3), number=1000))
26
- print(timeit.timeit(lambda : f1(0,1,2,3), number=1000)) # こっちの方が速かったです
35
+ print(timeit.timeit(lambda : f1(0,1,2,3), number=1000))
27
36
  print(timeit.timeit(lambda : f2(0,1,2,3), number=1000))
37
+ """
38
+ 私の環境だと、
39
+ 3.3318773460000557
40
+ 0.06133379499988223
41
+ 0.27946032499994544
42
+ くらい
43
+ """
28
44
  ```