回答編集履歴

6

edit

2018/01/25 16:19

投稿

mkgrei
mkgrei

スコア8562

test CHANGED
@@ -69,3 +69,25 @@
69
69
  `sum([s*t for s,t in zip(x,y)])`
70
70
 
71
71
  のほうが速いのか…
72
+
73
+
74
+
75
+ ```
76
+
77
+ 1010000 0.141 0.000 0.141 0.000 p2-3.py:9(<genexpr>)`
78
+
79
+ 10000 0.007 0.000 0.247 0.000 p2-3.py:9(<lambda>)
80
+
81
+ ```
82
+
83
+
84
+
85
+ ```
86
+
87
+ 10000 0.016 0.000 0.115 0.000 p2-3.py:9(<lambda>)
88
+
89
+ 10000 0.089 0.000 0.089 0.000 p2-3.py:9(<listcomp>)
90
+
91
+ ```
92
+
93
+ の速度の違いですね。

5

edit

2018/01/25 16:18

投稿

mkgrei
mkgrei

スコア8562

test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
 
24
24
 
25
- dotv = lambda x,y: sum(s*t for s,t in zip(x,y))
25
+ dotv = lambda x,y: sum([s*t for s,t in zip(x,y)])
26
26
 
27
27
  c = ((dotv(u,v) for u in b) for v in a)
28
28
 
@@ -55,3 +55,17 @@
55
55
  計算量を削減できるアルゴリズム。
56
56
 
57
57
  実装は…
58
+
59
+
60
+
61
+ ---
62
+
63
+
64
+
65
+ `sum(s*t for s,t in zip(x,y))`
66
+
67
+ より
68
+
69
+ `sum([s*t for s,t in zip(x,y)])`
70
+
71
+ のほうが速いのか…

4

edit

2018/01/25 16:05

投稿

mkgrei
mkgrei

スコア8562

test CHANGED
@@ -1,18 +1,14 @@
1
1
  LouiS0616さんのと似ているけど、出来る限り変な書き方してみました。
2
2
 
3
- このサイズでどうかはわかりませんが、書き出しは一気にやったほうが速いです(Pythonの一般論)。
3
+ このサイズでどうかはわかりませんが、書き出しは一気にやったほうが速いです(Pythonの一般論←AIZUのジャッジだとバッファしてくれるらしくあまり影響しないですね。そして整数から文字列へのキャストを消すと0.01s速くなりますね)。
4
4
 
5
5
 
6
6
 
7
7
  ```python
8
8
 
9
- from itertools import product as prod
9
+ n, m, l = map(int, input().split())
10
10
 
11
-
12
-
13
- n, m, l = [int(i) for i in input().split()]
14
-
15
- get_mat = lambda n: [[int(i) for i in input().split()] for _ in range(n)]
11
+ get_mat = lambda n: [list(map(int, input().split())) for _ in range(n)]
16
12
 
17
13
 
18
14
 
@@ -20,7 +16,7 @@
20
16
 
21
17
  b = get_mat(m)
22
18
 
23
- transpo = lambda a: [[v[i] for v in a] for i in range(len(a[0]))]
19
+ transpo = lambda a: [v for v in zip(*a)]
24
20
 
25
21
  b = transpo(b)
26
22
 
@@ -28,15 +24,13 @@
28
24
 
29
25
  dotv = lambda x,y: sum(s*t for s,t in zip(x,y))
30
26
 
31
- c = [[0]*l for i in range(n)]
27
+ c = ((dotv(u,v) for u in b) for v in a)
32
-
33
- for i,j in prod(range(n), range(l)):
34
-
35
- c[i][j] = dotv(a[i], b[j])
36
28
 
37
29
 
38
30
 
39
- print('\n'.join([' '.join(map(str, v)) for v in c]))
31
+ for v in c:
32
+
33
+ print(*v)
40
34
 
41
35
  ```
42
36
 
@@ -52,7 +46,7 @@
52
46
 
53
47
  普通はキャッシュ効率を高めることで高速化します。
54
48
 
55
- Pythonでは意味ないです…(ホント?)
49
+ Pythonでは意味ないです…(ホント?←たぶん転置してからのほうが速いですね
56
50
 
57
51
 
58
52
 

3

edit

2018/01/25 15:48

投稿

mkgrei
mkgrei

スコア8562

test CHANGED
@@ -52,7 +52,7 @@
52
52
 
53
53
  普通はキャッシュ効率を高めることで高速化します。
54
54
 
55
- Pythonでは意味ないです…
55
+ Pythonでは意味ないです…(ホント?)
56
56
 
57
57
 
58
58
 

2

edit

2018/01/25 14:15

投稿

mkgrei
mkgrei

スコア8562

test CHANGED
@@ -1,11 +1,3 @@
1
- https://qiita.com/Syo_pr/items/92b3cf7d7fc5dab4a3a7
2
-
3
-
4
-
5
- http://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1320-16.pdf
6
-
7
-
8
-
9
1
  LouiS0616さんのと似ているけど、出来る限り変な書き方してみました。
10
2
 
11
3
  このサイズでどうかはわかりませんが、書き出しは一気にやったほうが速いです(Pythonの一般論)。
@@ -47,3 +39,25 @@
47
39
  print('\n'.join([' '.join(map(str, v)) for v in c]))
48
40
 
49
41
  ```
42
+
43
+
44
+
45
+ ---
46
+
47
+
48
+
49
+ https://qiita.com/Syo_pr/items/92b3cf7d7fc5dab4a3a7
50
+
51
+ 行列積についての一般的なアルゴリズム。
52
+
53
+ 普通はキャッシュ効率を高めることで高速化します。
54
+
55
+ Pythonでは意味ないです…
56
+
57
+
58
+
59
+ http://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1320-16.pdf
60
+
61
+ 計算量を削減できるアルゴリズム。
62
+
63
+ 実装は…

1

edit

2018/01/25 13:30

投稿

mkgrei
mkgrei

スコア8562

test CHANGED
@@ -7,6 +7,8 @@
7
7
 
8
8
 
9
9
  LouiS0616さんのと似ているけど、出来る限り変な書き方してみました。
10
+
11
+ このサイズでどうかはわかりませんが、書き出しは一気にやったほうが速いです(Pythonの一般論)。
10
12
 
11
13
 
12
14