为了账号安全,请及时绑定邮箱和手机立即绑定

Python:如何在不使用更多 RAM 的情况下将 np 数组/列表拆分为两个数组/列表

Python:如何在不使用更多 RAM 的情况下将 np 数组/列表拆分为两个数组/列表

ibeautiful 2021-12-29 19:55:42
我在拆分 np.js 时遇到问题。数组和列表一分为二。这是我的代码:X = []y = []for seq, target in ConvertedData:    X.append(seq)    y.append(target)y = np.vstack(y)train_x = np.array(X)[:int(len(X) * 0.9)]train_y = y[:int(len(X) * 0.9)]validation_x = np.array(X)[int(len(X) * 0.9):]validation_y = y[int(len(X) * 0.9):]这是为神经网络准备数据的代码示例。效果很好,但会产生“内存不足错误”(我有 32GB 的内存):Traceback (most recent call last):  File "D:/Projects/....Here is a file location.../FileName.py", line 120, in <module>    validation_x = np.array(X)[int(len(X) * 0.9):]MemoryError它似乎保留在内存列表X和 np.array y 中,并将其复制为单独的变量train_x, train_y, validation_x, validation_y。你知道如何处理吗?X的形状:(324000, 256, 24)y的形状:(324000,10)train_x 的形状:(291600, 256, 24)train_y 的形状:(291600,10)验证_x的形状:(32400, 256, 24)验证形状_y:(32400,10)
查看完整描述

2 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

X = []

y = []

for seq, target in ConvertedData:

    X.append(seq)

    y.append(target)

X是一个列表seq。我假设这些是数组。X只是有指向那些的指针,


y = np.vstack(y)


train_x = np.array(X)[:int(len(X) * 0.9)]

从 制作一个数组X,然后是该数组的一个切片。完整的np.array(X)仍然存在于内存中


train_y = y[:int(len(X) * 0.9)]

validation_x = np.array(X)[int(len(X) * 0.9):]

从 制作另一个数组X。 train_x和validation_x是单独数组的视图。


validation_y = y[int(len(X) * 0.9):]

正在做


X1 = np.array(X)

train_x = X1[:...]

validation_x = X1[...:]

将消除这种重复。两者观点相同X1。


另一种方法是先对列表进行切片:


train_x = np.array(X[:...])

validation_x = np.array(X[...:])

我的猜测是内存使用,至少与在数组中会相似。


del X创建之后X1可能也有帮助,允许X对其引用的数组进行垃圾收集。


但请注意,一旦您在代码中的某一点开始遇到内存错误,像这样的技巧可能会推迟它。计算很容易最终制作出大小相当的副本或临时缓冲区。


您的拆分使用 2 个切片;这会产生不会增加原始内存使用量的视图。但是,如果您进行混洗拆分,则训练和验证部分将是副本,并且一起占用与源一样多的内存。


查看完整回答
反对 回复 2021-12-29
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

如内存错误的回答中所述。您可以像在这个问题中一样将每个训练数据数组腌制到文件中。


您可以通过train_test_split进行拆分,这可能是执行拆分的更有效方式。


import numpy as np

from sklearn.model_selection import train_test_split

X, y = np.arange(10).reshape((5, 2)), range(5)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)


查看完整回答
反对 回复 2021-12-29
  • 2 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信