我有一个50,000x5,000矩阵(浮点)文件。当使用x = np.genfromtxt(readFrom, dtype=float)
将文件加载到内存中,我收到以下错误消息:内存错误:numpy.genfromtxt()
File "C:\Python27\lib\site-packages\numpy\lib\npyio.py", line 1583, in genfromtxt for (i, converter) in enumerate(converters)])
MemoryError
欲整个文件加载到内存,因为我计算使用各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位系统上是不可行的。 – krlmlr 2012-07-14 16:28:02
看看http://stackoverflow.com/q/1896674/1301710 – bmu 2012-07-14 17:49:48