亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過沒有足夠的內存來防止 python3 進程被“殺死”

通過沒有足夠的內存來防止 python3 進程被“殺死”

哈士奇WWW 2022-10-25 15:32:25
我正在嘗試連接兩個大型數字矩陣,第一個:features是np.arrayshape 1238,72,另一個是從.json文件中加載的,如下面的第二行所示,它是 shape 1238, 768。我需要加載、連接、重新索引、拆分為折疊并將每個折疊保存在自己的文件夾中。問題是我Killed邁出了第一步(將.json內容讀入bert)with open(bert_dir+"/output4layers.json", "r+") as f:    bert = [json.loads(l)['features'][0]['layers'][0]['values'] for l in f.readlines()]    bert_post_data = np.concatenate((features,bert), axis=1)    del bert    bert_post_data = [bert_post_data[i] for i in index_shuf]    bert_folds = np.array_split(bert_post_data, num_folds)    for i in range(num_folds):        print("saving bert fold ",str(i), bert_folds[i].shape)        fold_dir = data_dir+"/folds/"+str(i)        save_p(fold_dir+"/bert", bert_folds[i])有沒有辦法可以有效地做到這一點?我的意思是,必須有更好的方法......熊貓,json lib?感謝您的時間和關注
查看完整描述

2 回答

?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

嘗試:

bert = [json.loads(line)['features'][0]['layers'][0]['values'] for line in f]

這樣,您至少不會一次讀取內存中的整個文件-也就是說,如果文件很大,您必須進一步處理存儲的內容bert


查看完整回答
反對 回復 2022-10-25
?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

我在搜索類似問題時找到了這個解決方案。它不是在特定問題中投票最多的,但在我看來,它比任何東西都好。

這個想法很簡單:不是保存一個字符串列表(文檔中的每一行一個),而是保存一個引用每一行的文件索引位置列表,然后當你想訪問它的內容時,你只需要seek到這個記憶位置。為此,一個類LineSeekableFile就派上用場了。

唯一的問題是您需要在整個過程中保持文件對象(而不是整個文件?。┐蜷_。

class LineSeekableFile:

    def __init__(self, seekable):

        self.fin = seekable

        self.line_map = list() # Map from line index -> file position.

        self.line_map.append(0)

        while seekable.readline():

            self.line_map.append(seekable.tell())


    def __getitem__(self, index):

        # NOTE: This assumes that you're not reading the file sequentially.

        # For that, just use 'for line in file'.

        self.fin.seek(self.line_map[index])

        return self.fin.readline()

然后訪問它:


b_file = bert_dir+"/output4layers.json"


fin = open(b_file, "rt")

BertSeekFile = LineSeekableFile(fin)


b_line = BertSeekFile[idx] #uses the __getitem__ method


fin.close()


查看完整回答
反對 回復 2022-10-25
  • 2 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號