我有一個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