gpt4 book ai didi

python - 带 for 循环的非常小的数字 python

转载 作者:行者123 更新时间:2023-11-30 22:09:54 24 4
gpt4 key购买 nike

我必须在[-10,10]区间内评估函数b=3x-2,精度增量为1、0.1、0.01、0.001、0.0001、0.00001等等,我的目标是达到8以上零(比这个多0.000000001)我试图用 np.linspace() 来做到这一点,但它有 8 个精度数字的限制(8 个零 0.00000001),但我想达到超过 8 个零,理想情况下会达到 10或 11 个零(我知道这需要几个小时甚至几天的时间,但目标是达到超过 8 个零)我编写了下一个代码,并解释了代码的每个部分:

import numpy as np
import matplotlib.pyplot as plt
from decimal import *
from time import time

file = open("tiempos.txt", "w")
increment = 1
upper_bound = 10
lower_bound = -10

#I'm creating an array to save the values of the increments (1, 0.1, 0.01, 0.001, 0.0001, etc.)
v = []
#Creating an array to save the time that takes to calculate the function with each increment
t = []

for x in range(0, 9):
#Start counting the time that takes each increment
start_time = time()
pts = int((upper_bound - lower_bound)/increment + 1)
#Counting the precision increments
a = np.linspace(lower_bound, upper_bound, pts)
#Calculating the function
b = 3 * a - 2
#introduce the valor of the increment into the array
v.append(increment)
#Divide the increment to get a smaller number
increment = increment/10
#Stop counting the time and seve it
elapsed_time = time() - start_time
#Introduce the time into the array
t.append(elapsed_time)
#write the interval and time into a txt file
file.write("Valor: %.10f " % increment)
file.write("Tiempo: %.10f segundos " % elapsed_time +'\n')

file.close()

print(v)
print(t)

#Graph the time that took each interval
plt.figure(1)
plt.plot(t,v,'*')
plt.show()

我在这部分遇到问题:

a = np.linspace(lower_bound, upper_bound, pts)

当我达到 8 个零 (0.00000001) 时,它表示我已达到 np.linspace

所以我的问题是如何才能达到更小的数字?

最佳答案

您的问题与np.linspace无关。 np.linspace 也没有特定的精度。你可以试试

x = np.linspace(0, 10**(-10), num=10000)

并且看到它工作正常。

问题是您的内存不足。每次将增量除以 10,数组就会增大 10 倍。您对此无能为力。

唯一的方法是在循环中生成其元素,而不是提前生成整个a数组。例如

while increment > 10**(-12):
# start_timing
for a in range(start, end, increment):
b = 3*a - 2
# stop timing
increment = increment / 10

由于内置范围似乎只接受整数步长,并且 np.arange 提到它不能很好地处理非整数步长,因此您可以创建自己的范围函数。请注意它必须是一个生成器,否则你将耗尽内存

def my_range(start, stop, step):
current = start
while current < stop:
current += step
yield current

关于python - 带 for 循环的非常小的数字 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51802744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com