回答編集履歴
3
コードの間違いを修正
answer
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
```python
|
4
4
|
# viewとcopyがわかっていないと理解不能な部分
|
5
|
-
result = np.empty(
|
5
|
+
result = np.empty((m1 + m2) * k, data.dtype)
|
6
|
-
o1 = result[:k*
|
6
|
+
o1 = result[:k*m1].reshape(k, m1)
|
7
|
-
o2 = result[k*
|
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
追記
answer
CHANGED
@@ -14,4 +14,4 @@
|
|
14
14
|
|
15
15
|
あとはfloat32でやれば倍くらいになると思います。精度が十分ならそれでどうぞ。
|
16
16
|
|
17
|
-
割とメモリ食いなので(最大の条件だと結果の配列だけで1.6GB、全体ではその数倍くらいになるでしょう)貧弱なコンピュータ環境だとスワップして遅い可能性もあります。処理自体は10秒くらい
|
17
|
+
割とメモリ食いなので(最大の条件だと結果の配列だけで1.6GB、全体ではその数倍くらいになるでしょう)貧弱なコンピュータ環境だとスワップして遅い可能性もあります。処理自体は私の環境で10秒くらいなので、そんなに遅いとも思えず。
|
1
凡ミス修正
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(
|
9
|
+
np.dot(data[:k*n1].reshape(k, n1), A.T, out=o1)
|
10
|
-
np.dot(
|
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秒くらい
|