Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成指数增长的数字列表(从开始到停止)_Python_List - Fatal编程技术网

Python 生成指数增长的数字列表(从开始到停止)

Python 生成指数增长的数字列表(从开始到停止),python,list,Python,List,我想在开始数和结束数之间生成一个指数递增的数字列表 因此,我想举个例子: 开始数量=700000 结束数=750000 步骤数=100 并生成一个包含100个数字的列表,大致如下:[7000070000100700250700700….74600075000] 我可以用np.arange对等距间隔进行此操作,甚至可以用np.logspace对稍微呈指数增长的间隔进行此操作,但使用此方法,增加的清晰度是不够的 理想情况下,我还可以控制距离增加的幅度\\ 谢谢您的时间。正如我在评论中所说,您的前提在

我想在开始数和结束数之间生成一个指数递增的数字列表

因此,我想举个例子: 开始数量=700000 结束数=750000 步骤数=100

并生成一个包含100个数字的列表,大致如下:[7000070000100700250700700….74600075000]

我可以用np.arange对等距间隔进行此操作,甚至可以用np.logspace对稍微呈指数增长的间隔进行此操作,但使用此方法,增加的清晰度是不够的

理想情况下,我还可以控制距离增加的幅度\\


谢谢您的时间。

正如我在评论中所说,您的前提在数学上有缺陷。从本质上讲,给定固定的开始、停止和num_步骤,您需要一个等式,这是数学,而不是python

带边界条件

f(0) = start
f(num) = stop
对于仅有的两个常数——系数A和基数b,这是相对容易的:

所以,如果我们选择了开始、停止和num,我们可以计算方程y中的所有常数。没有什么可以改变的,所以你必须总是得到相同的结果

这可以通过以下操作看出:

import numpy as np
import math

for b in range(2, 6):
    # np.logspace takes start and stop as the exponent of base
    # so use math.log for consistency -- same as np.geomspace
    print(np.logspace(math.log(2, b), math.log(10, b), num=5, base=b))
输出

[ 2.          2.99069756  4.47213595  6.68740305 10.        ]
[ 2.          2.99069756  4.47213595  6.68740305 10.        ]
[ 2.          2.99069756  4.47213595  6.68740305 10.        ]
[ 2.          2.99069756  4.47213595  6.68740305 10.        ]
编辑: n、 b.给出的方程是一般指数方程-任何形式为y=ab^kx+c的方程都可以改写为y=ab^cb^k^x=ab^x

注意,这不包括非指数方程y=C+Ab^x参见注释。如果你想用一个变量基来使用这个版本,那么这个函数就可以了

def varlogspace(start, stop, num, base, **kwargs):
    n = num - 1
    c = (start - stop) / (1 - base**n)
    a = start - c
    def f(x):
        return a + (c * base**x)
    return np.fromfunction(f, (num,), **kwargs)


for b in range(2, 6):
    print(varlogspace(2, 5, 5, base=b))
输出可以看到,增加底面会增加曲线的曲率

[2.  2.2 2.6 3.4 5. ]
[2.    2.075 2.3   2.975 5.   ]
[2.         2.03529412 2.17647059 2.74117647 5.        ]
[2.         2.01923077 2.11538462 2.59615385 5.        ]
我编写了一个简单的代码,它将根据您选择的因子增加步长,就像在本例中,当它结束时,步长将增加2。不幸的是,如果你想控制因素,你必须牺牲完全在停止时着陆。希望它能帮助您解决问题。

请尝试以下代码:

num=0
numlist=[]
for i in range(700000,750000):
    if num==100:
        break

    if i+num*100>750000:
        num=num/2
    numlist.append(i+num*100)
    num+=1
print(numlist)  

此代码依赖于数字位置,它可以递增生成数字

增加指数的因素是什么?我认为在固定的起点和终点之间工作时,不可能出现指数递增变化。问题是你需要不同的方程y=Ab^x,但是A和b是两个变量,只依赖于开始和结束。i、 e.对于任何开始、结束,您都可以求解唯一的方程y=fx=Ab^x s.t.f0=start和fnum_steps=end。对数空间中的锐度随基数的增加而增加。@Goyo不,不,看我的answer@FHTMitchell对,我想把数字之间的距离设为指数,而不是数字本身。这当然不是同一件事,但OP一开始似乎指的是后者,最后似乎指的是前者。。为什么不从fx=a+b^x开始呢?对我来说,这类问题似乎更符合逻辑,因为你可以通过仔细观察问题来解决a:f0=699999+b^0。剩下要做的就是通过边界条件b^99=50K+1来确定b,或者我在这里遗漏了什么?因为fx=a+b^x不是,因为它不满足方程df/dx=Cfx。如果OP很乐意使用一个指数间距和一个常数位移a,那么你可以做OP想要做的事情,因为你在方程gx=a+Cb^x中有三个常数,这将允许你改变一个,大概是b。哦,好的观点。。。根据这项任务的提出地点,可能会有一个严格的定义。呃,当然这会生成数字,但它们的间隔是均匀的,所以与x成线性。顺便说一句:只需定义一个函数def fx:return 700000+x*101并调用它,就可以创建相同的numlist,比如:对于range100中的i:numlist.appendfic我们可以在程序中使用随机数吗?例如,我们将随机数附加到生成的数字中?当然可以:您只需要从random import randint导入randint这样的随机函数,然后使用它:my_list.appendRandInt0100添加一个介于0和100之间的数字。
[2.  2.2 2.6 3.4 5. ]
[2.    2.075 2.3   2.975 5.   ]
[2.         2.03529412 2.17647059 2.74117647 5.        ]
[2.         2.01923077 2.11538462 2.59615385 5.        ]
start = 0
stop = 100
factor = 2
step = 0
numlist = []

while start < stop:
    numlist.append(start)
    step += factor
    start += step    

print(numlist)

# Output
[0, 2, 6, 12, 20, 30, 42, 56, 72, 90]
num=0
numlist=[]
for i in range(700000,750000):
    if num==100:
        break

    if i+num*100>750000:
        num=num/2
    numlist.append(i+num*100)
    num+=1
print(numlist)