我运行以下代码:
traindata = trainData.read_csv('train.tsv', delimiter = '\t')
调用这个函数:
def read_csv(self, filename, delimiter = ',', quotechar = '"'):
# open the file
reader = csv.reader(open(filename, 'rb'), delimiter = delimiter, quotechar = quotechar)
# read first line and extract its data
self.column_headings = np.array(next(reader))
# read subsequent lines
rows = []
for row in reader:
rows.append(row)
self.data = np.array(rows)
self.m, self.n = self.data.shape
这样我就可以调用
m, n = traindata.data.shape
print m, n, traindata.column_headings
不幸的是,在调用 read_csv 函数时出现错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-74-1cc5776f9a9c> in <module>()
13 print "loading data.."
14
---> 15 traindata = trainData.read_csv('test.tsv', delimiter = '\t')
16
C:\pc in read_csv(self, filename, delimiter, quotechar)
17 for row in reader:
18 rows.append(row)
---> 19 self.data = np.array(rows)
20 self.m, self.n = self.data.shape
21
ValueError: array is too big.
如何修复此行为并允许代码运行?
编辑:数据是一个 .tsv 文件,extract here.
请您参考如下方法:
Numpy 正在创建一个巨大的字符串数组,每个字符串的长度设置为该列中任何一个字符串的最大长度,并且您可能在分配大量内存的过程中耗尽了 ram。
通过做
self.data = np.array(rows, dtype=object)
numpy 不需要为字符串对象分配大块新内存 - dtype=object 告诉 numpy 将其数组内容保留为对现有 python 对象的引用(字符串已经存在于你的 python 中list rows),这些指针占用的空间比字符串对象少得多。
