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

回答編集履歴

3

コードの間違いを修正

2020/04/25 21:00

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  ```python
4
4
  # viewとcopyがわかっていないと理解不能な部分
5
- result = np.empty(data.shape, data.dtype)
5
+ result = np.empty((m1 + m2) * k, data.dtype)
6
- o1 = result[:k*n1].reshape(k, n1)
6
+ o1 = result[:k*m1].reshape(k, m1)
7
- o2 = result[k*n1:].reshape(k, n2)
7
+ o2 = result[k*m1:].reshape(k, m2)
8
8
 
9
9
  np.dot(data[:k*n1].reshape(k, n1), A.T, out=o1)
10
10
  np.dot(data[k*n1:].reshape(k, n2), B.T, out=o2)

2

追記

2020/04/25 21:00

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -14,4 +14,4 @@
14
14
 
15
15
  あとはfloat32でやれば倍くらいになると思います。精度が十分ならそれでどうぞ。
16
16
 
17
- 割とメモリ食いなので(最大の条件だと結果の配列だけで1.6GB、全体ではその数倍くらいになるでしょう)貧弱なコンピュータ環境だとスワップして遅い可能性もあります。処理自体は10秒くらい
17
+ 割とメモリ食いなので(最大の条件だと結果の配列だけで1.6GB、全体ではその数倍くらいになるでしょう)貧弱なコンピュータ環境だとスワップして遅い可能性もあります。処理自体は私の環境で10秒くらいなので、そんなに遅いとも思えず。

1

凡ミス修正

2020/04/25 14:23

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -6,10 +6,12 @@
6
6
  o1 = result[:k*n1].reshape(k, n1)
7
7
  o2 = result[k*n1:].reshape(k, n2)
8
8
 
9
- np.dot(d1.reshape(k, n1), A.T, out=o1)
9
+ np.dot(data[:k*n1].reshape(k, n1), A.T, out=o1)
10
- np.dot(d2.reshape(k, n2), B.T, out=o2)
10
+ np.dot(data[k*n1:].reshape(k, n2), B.T, out=o2)
11
11
  ```
12
12
 
13
13
  メモリコピーが減って1~2割速くなるかどうかという程度です。
14
14
 
15
- あとはfloat32でやれば倍くらいになると思います。精度が十分ならそれでどうぞ。
15
+ あとはfloat32でやれば倍くらいになると思います。精度が十分ならそれでどうぞ。
16
+
17
+ 割とメモリ食いなので(最大の条件だと結果の配列だけで1.6GB、全体ではその数倍くらいになるでしょう)貧弱なコンピュータ環境だとスワップして遅い可能性もあります。処理自体は10秒くらい