MemoryError: memory allocation failed, allocating x bytes
MemoryError: memory allocation failed, allocating x bytes
所以,我正在编写一个程序,允许我在我的 Ti-nspire CX II-T 中绘制具有给定起始值的 Collatz 序列图,它 运行ning 很好(没有关于内存的错误) 到目前为止。每次我 运行 该程序时,我都会得到有关内存分配的奇怪输出。
代码:
from math import *
import ti_plotlib as plt
start_x = int(input("x? "))
cur_x = 0
n = 1
x = [start_x]
y = [1]
xmax = cur_x
while cur_x!=1:
if fmod(cur_x,2) == 0:
cur_x=cur_x/2
else:
cur_x=3*cur_x+1
x+=[cur_x]
n=n+1
y+=[n]
if cur_x>xmax:
xmax = x.max()
plt.grid(1,1,"dotted")
plt.axes("on")
plt.window(0,plt.xmax,0,y.max()+1)
plt.plot(x,y)
收到的输出:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "C:\Users\-------\AppData\Roaming\Texas Instruments\TI-Nspire CX Student Software\python\doc9\prob3xplus1.py", line 14, in <module>
MemoryError: memory allocation failed, allocating 95112 bytes
到目前为止我已经尝试过:
- 减少包含的库;
- 删除符号和多余的东西;
这两者都有助于减少分配的字节数。
- 包含 micropython 和检查的内存数据:
mem: total=19112938, current=18770377, peak =18770617 stack: 7432 out of 131070
GC: total: 2072832, used: 26688, free: 2046144
No. of 1-blocks: 295, 2-blocks: 40, max blk sz: 41, max free sz: 63922
如能提供有关此问题的任何帮助,我们将不胜感激。
您的程序陷入了无限循环:
你的循环在cur_x
变成1时结束,但是你忘记初始化为start_x,所以它初始为0。在循环中,因为它是0,所以它是一个倍数2,所以你继续划分它。
与内存错误无关,您有时也弄乱了 x 和 y 列表...
这应该有效:
from math import *
import ti_plotlib as plt
start_x = int(input("x? "))
cur_x = 0
n = 1
y = [start_x]
x = [1]
cur_x = start_x
xmax = cur_x
iter = 0
while cur_x!=1:
if iter>10:
break
iter = iter+1
if cur_x%2 == 0:
cur_x=cur_x/2
else:
cur_x=3*cur_x+1
y+=[cur_x]
n=n+1
x+=[n]
if cur_x>xmax:
xmax = cur_x
plt.grid(1,1,"dotted")
plt.axes("on")
plt.window(0,n+1,0,xmax)
plt.plot(x,y)
显然我的代码陷入了无限循环。此代码最终有效:
start_x = 1
while start_x<=1:
start_x = int(input("x? "))
cur_x = start_x
val = []
y = []
val.append(cur_x)
n = 0
y.append(0)
xmax = cur_x
while cur_x>1:
if fmod(cur_x,2) == 0:
cur_x=round(cur_x/2)
else:
cur_x=round(3*cur_x+1)
n=n+1
val.append(cur_x)
y.append(n)
if cur_x>xmax:
xmax = cur_x
plt.auto_window(y,val)
plt.color(200,0,0)
plt.axes("axes")
plt.text_at(1,"n","left")
plt.title("Collatz conjecture")
plt.plot(y,val,"o")
print(val)
print(y)
所以,我正在编写一个程序,允许我在我的 Ti-nspire CX II-T 中绘制具有给定起始值的 Collatz 序列图,它 运行ning 很好(没有关于内存的错误) 到目前为止。每次我 运行 该程序时,我都会得到有关内存分配的奇怪输出。
代码:
from math import *
import ti_plotlib as plt
start_x = int(input("x? "))
cur_x = 0
n = 1
x = [start_x]
y = [1]
xmax = cur_x
while cur_x!=1:
if fmod(cur_x,2) == 0:
cur_x=cur_x/2
else:
cur_x=3*cur_x+1
x+=[cur_x]
n=n+1
y+=[n]
if cur_x>xmax:
xmax = x.max()
plt.grid(1,1,"dotted")
plt.axes("on")
plt.window(0,plt.xmax,0,y.max()+1)
plt.plot(x,y)
收到的输出:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "C:\Users\-------\AppData\Roaming\Texas Instruments\TI-Nspire CX Student Software\python\doc9\prob3xplus1.py", line 14, in <module>
MemoryError: memory allocation failed, allocating 95112 bytes
到目前为止我已经尝试过:
- 减少包含的库;
- 删除符号和多余的东西;
这两者都有助于减少分配的字节数。
- 包含 micropython 和检查的内存数据:
mem: total=19112938, current=18770377, peak =18770617 stack: 7432 out of 131070 GC: total: 2072832, used: 26688, free: 2046144 No. of 1-blocks: 295, 2-blocks: 40, max blk sz: 41, max free sz: 63922
如能提供有关此问题的任何帮助,我们将不胜感激。
您的程序陷入了无限循环:
你的循环在cur_x
变成1时结束,但是你忘记初始化为start_x,所以它初始为0。在循环中,因为它是0,所以它是一个倍数2,所以你继续划分它。
与内存错误无关,您有时也弄乱了 x 和 y 列表...
这应该有效:
from math import *
import ti_plotlib as plt
start_x = int(input("x? "))
cur_x = 0
n = 1
y = [start_x]
x = [1]
cur_x = start_x
xmax = cur_x
iter = 0
while cur_x!=1:
if iter>10:
break
iter = iter+1
if cur_x%2 == 0:
cur_x=cur_x/2
else:
cur_x=3*cur_x+1
y+=[cur_x]
n=n+1
x+=[n]
if cur_x>xmax:
xmax = cur_x
plt.grid(1,1,"dotted")
plt.axes("on")
plt.window(0,n+1,0,xmax)
plt.plot(x,y)
显然我的代码陷入了无限循环。此代码最终有效:
start_x = 1
while start_x<=1:
start_x = int(input("x? "))
cur_x = start_x
val = []
y = []
val.append(cur_x)
n = 0
y.append(0)
xmax = cur_x
while cur_x>1:
if fmod(cur_x,2) == 0:
cur_x=round(cur_x/2)
else:
cur_x=round(3*cur_x+1)
n=n+1
val.append(cur_x)
y.append(n)
if cur_x>xmax:
xmax = cur_x
plt.auto_window(y,val)
plt.color(200,0,0)
plt.axes("axes")
plt.text_at(1,"n","left")
plt.title("Collatz conjecture")
plt.plot(y,val,"o")
print(val)
print(y)