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

回答編集履歴

6

edit

2018/01/25 16:19

投稿

mkgrei
mkgrei

スコア8562

answer CHANGED
@@ -33,4 +33,15 @@
33
33
  `sum(s*t for s,t in zip(x,y))`
34
34
  より
35
35
  `sum([s*t for s,t in zip(x,y)])`
36
- のほうが速いのか…
36
+ のほうが速いのか…
37
+
38
+ ```
39
+ 1010000 0.141 0.000 0.141 0.000 p2-3.py:9(<genexpr>)`
40
+ 10000 0.007 0.000 0.247 0.000 p2-3.py:9(<lambda>)
41
+ ```
42
+
43
+ ```
44
+ 10000 0.016 0.000 0.115 0.000 p2-3.py:9(<lambda>)
45
+ 10000 0.089 0.000 0.089 0.000 p2-3.py:9(<listcomp>)
46
+ ```
47
+ の速度の違いですね。

5

edit

2018/01/25 16:18

投稿

mkgrei
mkgrei

スコア8562

answer CHANGED
@@ -10,7 +10,7 @@
10
10
  transpo = lambda a: [v for v in zip(*a)]
11
11
  b = transpo(b)
12
12
 
13
- dotv = lambda x,y: sum(s*t for s,t in zip(x,y))
13
+ dotv = lambda x,y: sum([s*t for s,t in zip(x,y)])
14
14
  c = ((dotv(u,v) for u in b) for v in a)
15
15
 
16
16
  for v in c:
@@ -26,4 +26,11 @@
26
26
 
27
27
  http://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1320-16.pdf
28
28
  計算量を削減できるアルゴリズム。
29
- 実装は…
29
+ 実装は…
30
+
31
+ ---
32
+
33
+ `sum(s*t for s,t in zip(x,y))`
34
+ より
35
+ `sum([s*t for s,t in zip(x,y)])`
36
+ のほうが速いのか…

4

edit

2018/01/25 16:05

投稿

mkgrei
mkgrei

スコア8562

answer CHANGED
@@ -1,23 +1,20 @@
1
1
  LouiS0616さんのと似ているけど、出来る限り変な書き方してみました。
2
- このサイズでどうかはわかりませんが、書き出しは一気にやったほうが速いです(Pythonの一般論)。
2
+ このサイズでどうかはわかりませんが、書き出しは一気にやったほうが速いです(Pythonの一般論←AIZUのジャッジだとバッファしてくれるらしくあまり影響しないですね。そして整数から文字列へのキャストを消すと0.01s速くなりますね)。
3
3
 
4
4
  ```python
5
- from itertools import product as prod
5
+ n, m, l = map(int, input().split())
6
+ get_mat = lambda n: [list(map(int, input().split())) for _ in range(n)]
6
7
 
7
- n, m, l = [int(i) for i in input().split()]
8
- get_mat = lambda n: [[int(i) for i in input().split()] for _ in range(n)]
9
-
10
8
  a = get_mat(n)
11
9
  b = get_mat(m)
12
- transpo = lambda a: [[v[i] for v in a] for i in range(len(a[0]))]
10
+ transpo = lambda a: [v for v in zip(*a)]
13
11
  b = transpo(b)
14
12
 
15
13
  dotv = lambda x,y: sum(s*t for s,t in zip(x,y))
16
- c = [[0]*l for i in range(n)]
14
+ c = ((dotv(u,v) for u in b) for v in a)
17
- for i,j in prod(range(n), range(l)):
18
- c[i][j] = dotv(a[i], b[j])
19
15
 
20
- print('\n'.join([' '.join(map(str, v)) for v in c]))
16
+ for v in c:
17
+ print(*v)
21
18
  ```
22
19
 
23
20
  ---
@@ -25,7 +22,7 @@
25
22
  https://qiita.com/Syo_pr/items/92b3cf7d7fc5dab4a3a7
26
23
  行列積についての一般的なアルゴリズム。
27
24
  普通はキャッシュ効率を高めることで高速化します。
28
- Pythonでは意味ないです…(ホント?)
25
+ Pythonでは意味ないです…(ホント?←たぶん転置してからのほうが速いですね
29
26
 
30
27
  http://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1320-16.pdf
31
28
  計算量を削減できるアルゴリズム。

3

edit

2018/01/25 15:48

投稿

mkgrei
mkgrei

スコア8562

answer CHANGED
@@ -25,7 +25,7 @@
25
25
  https://qiita.com/Syo_pr/items/92b3cf7d7fc5dab4a3a7
26
26
  行列積についての一般的なアルゴリズム。
27
27
  普通はキャッシュ効率を高めることで高速化します。
28
- Pythonでは意味ないです…
28
+ Pythonでは意味ないです…(ホント?)
29
29
 
30
30
  http://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1320-16.pdf
31
31
  計算量を削減できるアルゴリズム。

2

edit

2018/01/25 14:15

投稿

mkgrei
mkgrei

スコア8562

answer CHANGED
@@ -1,7 +1,3 @@
1
- https://qiita.com/Syo_pr/items/92b3cf7d7fc5dab4a3a7
2
-
3
- http://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1320-16.pdf
4
-
5
1
  LouiS0616さんのと似ているけど、出来る限り変な書き方してみました。
6
2
  このサイズでどうかはわかりませんが、書き出しは一気にやったほうが速いです(Pythonの一般論)。
7
3
 
@@ -22,4 +18,15 @@
22
18
  c[i][j] = dotv(a[i], b[j])
23
19
 
24
20
  print('\n'.join([' '.join(map(str, v)) for v in c]))
25
- ```
21
+ ```
22
+
23
+ ---
24
+
25
+ https://qiita.com/Syo_pr/items/92b3cf7d7fc5dab4a3a7
26
+ 行列積についての一般的なアルゴリズム。
27
+ 普通はキャッシュ効率を高めることで高速化します。
28
+ Pythonでは意味ないです…
29
+
30
+ http://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1320-16.pdf
31
+ 計算量を削減できるアルゴリズム。
32
+ 実装は…

1

edit

2018/01/25 13:30

投稿

mkgrei
mkgrei

スコア8562

answer CHANGED
@@ -3,6 +3,7 @@
3
3
  http://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1320-16.pdf
4
4
 
5
5
  LouiS0616さんのと似ているけど、出来る限り変な書き方してみました。
6
+ このサイズでどうかはわかりませんが、書き出しは一気にやったほうが速いです(Pythonの一般論)。
6
7
 
7
8
  ```python
8
9
  from itertools import product as prod