2

乗算する必要がある 2 つの大きな行列があります。

A×D

ここで、A = 2358048 x 1 B = 1 x 492020

乗算には大量のRAMが必要であることを理解しています。これが、matlabでメモリ不足になる理由です(サーバーで90GBのRAMを利用できます)。

いくつかのステップで行う方法はありますか。たぶん、それをいくつかの方法で分解し、いくつかのファイルに断片を保存し、乗算を段階的に実行します。じゃあ最後にまとめてね?サンプルの matlab コードが最も価値があります。ありがとう

4

1 に答える 1

8

完全な製品は 2358048 x 492020 になり、1,160,206,776,960 個の要素があることを意味します。これらを float32 に格納すると、4 テラバイトを超えるデータになります。完全なマトリックスが必要ですか? とにかく、RAMにロードするつもりはありません。

ただし、これは 2 つの巨大なベクトルの外積にすぎないため、必要に応じて特定の部分要素を見つけるのは非常に簡単です。C = AB の場合、C(i, j) = A(i, 1) * B(1, j). マトリックスで行う必要があるほとんどのことは、おそらくそのように行うことができます。おそらく、巨大なもの全体を保存するのではなく、必要に応じてその場で製品のブロックを計算します。

製品を使用するために必要なものは何ですか?

何らかの理由で巨大なもの全体をディスクに書き出す必要がある場合は、A をループして一度に 1 行ずつファイルに書き込むか (単にA(i,1) * B)、または B を介して一度に 1 列ずつ書き込む ( B(1,i) * A)のいずれかを行うのは非常に簡単です。 .

于 2012-05-28T04:45:21.970 に答える