【问题标题】:How to tackle memory error while loading heavy CSV Files如何在加载大量 CSV 文件时解决内存错误
【发布时间】:2016-04-06 17:30:51
【问题描述】:

我制作了一个 CSV 文件来存储一些数据,如下所示:

img = loadmat('test.mat')
a,b,c = np.shape(img)  # c is the no. of slices
for i in range(c):
    feature_1 = #kurtosis of image slice
    feature_2 = #entropy of image slice
    .
    .
    feature_8 = #skewness of image slice
    train_data = np.concatenate((feature_1,feature_2,...,feature_8),axis=1)
    #this loop will repeat for all the slices and result will be appended in another array
    train_data01.append(train_data)
    #this will give a list with all data in one axis.
feature_img = np.concatenate(train_data01,axis=0)
#this will give a array of size (mx8) where m is the number of pixels in image.
np.savetxt('savedata.csv',feature_img,fmt = '%4.2f') #save teh data in csv file

现在我尝试像这样检索数据:

hg01 = []
with open('savedata.csv','rb') as f:
    reader = csv.reader(f)
    for row in reader:
        hg01.append(row)

hg01 = np.concatenate(hg01, axis = 0)
hg01_feature = np.empty(shape=(np.shape(hg01)[0],80), dtype='float32')

for i in range(np.shape(hg01)[0]):
     a = hg01[i]
     b = np.fromstring(a,dtype='float32',sep=' ')
     np.append(np.transpose(hg01_feature[i,:]),b,axis=1)

现在的问题是 hg01 的 numpy 数组的实际尺寸是 1520640x80,大小约为 644MB。现在,在第 6 位患者之后,我的系统出现故障,并且在加载第 7 位患者数据时,它在以下行显示内存错误:

hg07 = np.concatenate(hg07, axis = 0)

所以伙计们,我有大约 40 个患者数据以及如何加载这些数据。 我正在使用随机森林进行图像分类。我的系统有 8 GB 内存。

【问题讨论】:

  • np.loadtxtnp.genfromtxt 通常可以处理 CSV 文件,例如 np.savetxt 编写的文件。
  • 不要使用np.append(像那样)。
  • @hpaulj:您能否建议任何其他方法来回答(以及示例)。谢谢
  • 如果在加载过程中出现内存错误,在处理过程中也会出现。
  • @hpaulj:没错。但解决方案是什么。如何处理这个庞大的数据。你能告诉我,如果我对一个 numpy 数组进行采样,它会影响它的信息内容以及如何去做(如果可能的话)。

标签: python csv numpy image-processing


【解决方案1】:

每一行都是一个字符串。我认为您可以通过拆分每个字符串来获得所需的行为。拆分有点复杂,因为我只是大致正确:每一行实际上是一个包含单个字符串的单元素列表,因此您必须尊重 [0] 元素。拆分应该如下所示:

new_feature = [ f[0].split() for f in feature ]

现在在 new_feature 上执行 np.shape ,希望这能满足您的需求。

【讨论】:

  • 谢谢。我以某种不同的方式做到了。现在的问题是每个 numpy 数组都太大了,即 1520640x80,大小约为 644MB,并且在加载第 6 个患者数据后,numpy 在第 7 个患者数据加载期间显示内存错误。你能告诉我如何处理大量数据和内存错误。
  • 最好在您的问题中添加代码。很难在评论中阅读。
  • @hpaulj:好的。让我在问题中做一些更改以提及当前的问题。
猜你喜欢
  • 1970-01-01
  • 2020-06-18
  • 2017-01-16
  • 1970-01-01
  • 2019-07-16
  • 2019-08-12
  • 2021-03-03
  • 1970-01-01
  • 2018-07-07
相关资源
最近更新 更多