ここでこの質問をしました:オカレンスマトリックスを共起マトリックスに変換する方法
データが大きすぎて、R を使用してこれを行うことができないことに気付きました。コンピューターがハングします。実際のデータは、約 500 万行、600 列のテキスト ファイルです。これを行うための代替オプションとして Python があると思います。
ここでこの質問をしました:オカレンスマトリックスを共起マトリックスに変換する方法
データが大きすぎて、R を使用してこれを行うことができないことに気付きました。コンピューターがハングします。実際のデータは、約 500 万行、600 列のテキスト ファイルです。これを行うための代替オプションとして Python があると思います。
R
これは、コードをコードに変換する方法ですPython
。
>>> import numpy as np
>>> a=np.array([[0, 1, 0, 0, 1, 1],
[0, 0, 1, 1, 0, 1],
[1, 1, 1, 1, 0, 0],
[1, 1, 1, 0, 1, 1]])
>>> acov=np.dot(a.T, a)
>>> acov[np.diag_indices_from(acov)]=0
>>> acov
array([[0, 2, 2, 1, 1, 1],
[2, 0, 2, 1, 2, 2],
[2, 2, 0, 2, 1, 2],
[1, 1, 2, 0, 0, 1],
[1, 2, 1, 0, 0, 2],
[1, 2, 2, 1, 2, 0]])
ただし、非常に大きなデータセットがあります。共起行列を 1 つずつ組み立てる必要がなく、値を に保存する場合、int64
3e+9 の数値を使用すると、データを保持するだけで 24 GB の RAM が必要になりますhttp://www.wolframalpha.com/入力/?i=3e9+ *+8+バイト。したがって、おそらくよく考えてdtype
、データをどこに保存するかを決定することをお勧めします: http://docs.scipy.org/doc/numpy/user/basics.types.html。使用することで、現在のまともなデスクトップ PC で製品int16
の操作が可能になるでしょう。dot