python - 内存错误 : numpy. genfromtxt()

标签 python memory numpy scipy

我有一个 50,000x5,000 矩阵(浮点)文件。当使用 x = np.genfromtxt(readFrom, dtype=float) 将文件加载到内存中时,我收到以下错误消息:

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])

有什么有效的方法可以将巨大的矩阵文件加载到内存中。

谢谢。

更新:

我设法解决了这个问题。这是我的解决方案。我不确定它是否有效或逻辑上是否正确,但对我来说效果很好:

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])

请帮助我改进我的解决方案。

最佳答案

根据您的操作系统和 Python 版本,您很可能永远无法分配 1GB 数组(mgilson 的答案就在这里)。问题不是内存不足,而是连续 内存不足。如果您使用的是 32 位计算机(尤其是运行 Windows),添加更多内存也无济于事。迁移到 64 位架构可能会有所帮助。

使用较小的数据类型当然会有帮助;根据您使用的操作,16 位 float 甚至 8 位整数可能就足够了。

如果这些都不起作用,那么您不得不承认数据不适合内存。您必须分段处理它(在这种情况下,将数据存储为 HDF5 数组可能非常有用)。

关于python - 内存错误 : numpy. genfromtxt(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11485369/

相关文章:

python - Docker 撰写 : Allowing Network Interactions Between Services

java - python - JAR 在终端中工作,但不能在 python 中工作

java - Spark 打印数据帧而不会耗尽内存

c++ - 计算指针时访问冲突

python - Python中如何进行C语言计算

Python - 解析列和行

来自 csv 文件的 Python 2.7 编码

linux - 尽管有足够的内存,但无法使用 'tail -f"

Python 根据条件合并两个 Numpy 数组

python - 将函数应用于元组数组