前提・実現したいこと
google colaboratory においてRAMの使用量が大きすぎてクラッシュしてしまいました。
dataframeを用いた実装をしていたのですが、少し調べたところnumpyのmemmapを使用することにより、
ディスクとのやりとりによりRAMの使用量を削減できるのではないかと思いました。
そこで、以下のコードをmemmapを使用して変換してくださると嬉しいです。
(memmapを用いずとも、0~63行のdfの内容が見ることが可能ならどのような解決方法でも問題はありません)
よろしくお願いします。
発生している問題・エラーメッセージ
セッションがクラッシュしました。 使用可能な RAM をすべて使用した後で、セッションがクラッシュしました。
該当のソースコード
python
1import pandas as pd 2 3df = pd.DataFrame() 4num = {} 5 6for i in range(16): 7 num[i] = [str(i)+'-'+str(j) for j in range(32)] 8 df = pd.concat(objs=[df, pd.DataFrame([num[i]])], axis=0) 9 10df.index = [i for i in range(16)] 11 12# pat: how many bits df shift, df: dataframe, num: row 13def shr(pat, df, num): 14 15 dfshr_temp = df.iloc[num].shift(pat, fill_value='0') 16 dfshr_temp = pd.DataFrame(dfshr_temp).T 17 dfshr_temp = dfshr_temp.reset_index(drop=True) 18 19 return dfshr_temp 20 21# pat: how many bits df rotate, df: dataframe, num: row 22def rotr(pat, df, num): 23 24 dfrotr_temp = df.iloc[num].shift(pat, fill_value=df.iloc[num, pat*(-1):]) 25 dfrotr_temp = pd.DataFrame(dfrotr_temp).T 26 dfrotr_temp = dfrotr_temp.reset_index(drop=True) 27 28 return dfrotr_temp 29 30for t in range(16, 64): 31 print(t) # 確認用 32 df = pd.concat(objs=[df, pd.DataFrame(rotr(17, df, t-2)+'xor'+rotr(19, df, t-2)+'xor'+shr(10, df, t-2)+'or'+df.iloc[t-7, :]+'or'+rotr(7, df, t-15)+'xor'+rotr(18, df, t-15)+'xor'+shr(3, df, t-15)+'or'+df.iloc[t-16, :])], axis=0) 33 df = df.reset_index(drop=True) 34 35#df.iloc[63, :]
試したこと
Ramの増築を試みましたが、for文のt == 47でクラッシュしてしまいました。
補足情報(FW/ツールのバージョンなど)
google colaboratory
RAM 25.51GB
ディスク 48.97GB
あなたの回答
tips
プレビュー