当我使用以下代码使用numpy加载csv文件时
F = np.loadtxt(F,skiprows=1, delimiter=',',usecols=(2,4,6))
MASS = F[:,4]
#print(MASS)
Z = F[:,6]
N = len(MASS)
print(len(MASS))
我收到以下错误
Traceback (most recent call last):
File "C:\Users\Codes\test2.py", line 16, in <module>
F = np.loadtxt(F,skiprows=1, delimiter=',',usecols=(2,4,6))
File "C:\Python34\lib\site-packages\numpy\lib\npyio.py", line 859, in loadtxt
X.append(items)
MemoryError
如果物理内存为24GB,并且文件为2.70Gb,那么我不明白为什么会出现此错误。谢谢!
编辑
我也试图像这样加载相同的文件
f = open(F) #Opens file
f.readline() # Strips Header
nlines = islice(f, N) #slices file to only read N lines
for line in nlines:
if line !='':
line = line.strip()
line = line.replace(',',' ') #Replace comma with space
columns = line.split()
tid = columns[2]
m = columns[4]
r = columns[6] # assigns variable to columns
M.append(m)
R.append(r) #appends data in list
TID.append(tid)
print(len(MASS))
并得到另一个内存错误。
Traceback (most recent call last):
File "C:\Users\Loop test.py", line 58, in <module>
M.append(m)
MemoryError
在这种情况下,构建第一个列表时似乎内存不足 M
首先,我将检查您是否实际上使用的是64位python版本。在Windows上,即使在64位系统上,通常也要使用32位版本。
尝试:
import platform
print(platform.architecture()[0])
如果看到32bit
,那就是您的问题。一个32位的可执行文件只能寻址2GB的内存,因此您永远不能拥有超过2GB的阵列(或其他对象)。
但是,loadtxt
效率很低,因为它先建立一个list
然后将其转换为一个numpy数组。您的示例代码执行相同的操作。(pandas.read_csv
如果您碰巧遇到的话,效率会更高,优化程度也将大大提高pandas
。)
Alist
是一个比numpy数组低得多的内存效率结构。它类似于指针数组。换句话说,列表中的每个项目都有一个附加的64位。
numpy.fromiter
如果需要“更精简”的文本I / O,可以使用此方法进行改进。有关更完整的讨论(无耻的插件),请参见大型CSV文件(numpy)上的Python内存不足。
但是,我认为您的问题不是loadtxt
。我认为这是python的32位版本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句