Str*_*247 2 python memory numpy
当我使用以下代码使用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))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
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
Run Code Online (Sandbox Code Playgroud)
我有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))
Run Code Online (Sandbox Code Playgroud)
并得到另一个内存错误.
Traceback (most recent call last):
File "C:\Users\Loop test.py", line 58, in <module>
M.append(m)
MemoryError
Run Code Online (Sandbox Code Playgroud)
在这种情况下,似乎在构建第一个列表时内存不足 M
首先,我会检查你实际上是在使用64位构建的python.在Windows上,即使在64位系统上,也常常使用32位版本.
尝试:
import platform
print(platform.architecture()[0])
Run Code Online (Sandbox Code Playgroud)
如果你看32bit,这是你的问题.32位可执行文件只能处理2GB内存,因此您永远不会有超过2GB的阵列(或其他对象).
但是,loadtxt效率相当低,因为它通过构建a list然后将其转换为numpy数组来工作.您的示例代码执行相同的操作.(pandas.read_csv如果您碰巧有更好的效率和非常优化的话pandas.)
A list是一个比numpy数组更低内存效率的结构.它类似于指针数组.换句话说,列表中的每个项目都有一个额外的64位.
numpy.fromiter如果您需要"更精简"的文本I/O,可以使用它来改进.请参阅大型CSV文件(numpy)上的Python内存不足以进行更完整的讨论(无耻插件).
尽管如此,我不认为你的问题是loadtxt.我认为这是一个32位的python版本.