【发布时间】:2012-07-14 04:23:10
【问题描述】:
我有一个 50,000x5,000 矩阵(浮点)文件。当使用x = np.genfromtxt(readFrom, dtype=float) 将文件加载到内存中时,我收到以下错误消息:
文件“C:\Python27\lib\site-packages\numpy\lib\npyio.py”,第 1583 行, 在 genfromtxt for (i, converter) in enumerate(converters)])
内存错误
我想将整个文件加载到内存中,因为我正在使用 Scipy 计算每个向量之间的欧几里得距离。 dis = scipy.spatial.distance.euclidean(x[row1], x[row2])
是否有任何有效的方法可以将巨大的矩阵文件加载到内存中。
谢谢。
Update:
我设法解决了这个问题。这是我的解决方案。我不确定它是否有效或逻辑正确,但对我来说效果很好:
x = open(readFrom, 'r').readlines()
y = np.asarray([np.array(s.split()).astype('float32') for s in x], dtype=np.float32)
....
dis = scipy.spatial.distance.euclidean(y[row1], y[row2])
请帮助我改进我的解决方案。
【问题讨论】:
-
计算所有向量对的距离将比加载文件花费更长的时间。重新检查您是否真的需要所有向量对。此外,您将需要至少 25 * 10^7 * 4 = 10^9 字节,也许 2*10^9 字节——后者在 32 位系统上是不可行的。