两个数字之间的列表 - 定义步数,而不是步长
List between two numbers - definine number of steps, not step size
我想在两个数字之间创建一个列表,例如:
import numpy as np
np.arange(0,100,10)
输出:
array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
但是我不想定义步长,而是定义步数。如果我定义了 3 个步骤,那么我想得到这个列表:
array([ 0, 50, 100])
或4个步骤:
array([0, 33, 66, 100])
以此类推
我是否必须设置 4(对于所有值)或 2(仅对于插值)以获得最后的输出或者我是否正在获取数组或列表都没有关系。 rounds/ceils 的方式也无关紧要。创建这样的列表只是合乎逻辑的。
您可以继续使用np.arange
功能。您只需要根据最大值和最小值计算步长,以及步数:
import numpy as np
import math
nb_steps = 3
min_val = 0
max_val = 100
step_size = math.floor((max_val-min_val)/nb_steps)
arr = np.arange(min_val,max_val,step_size)
# update last value to match max_val
# this step is needed if (max_val-min_val)/nb_steps is a decimal number
arr[-1] = max_val
您也可以使用 numpy.linspace,正如评论中指出的那样:
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
https://numpy.org/doc/stable/reference/generated/numpy.linspace.html
def listWithNumberOfStep(startNumber, endNumber, nbSteps):
listNumber = []
delta = endNumber - startNumber
for i in range(nbSteps + 1):
listNumber.append(startNumber + (delta/nbSteps * i))
return listNumber
我觉得像这样就好了
even_arange = lambda n: np.arange(0, 101, 100/(n-1)).astype("int64")
even_arange(n)
或
from functools import partial
even_arnage = partial(start=0, stop=100, dtype="int64")
even_arange(num=n)
如评论中所述,numpy.linspace returns 在指定间隔内均匀分布数字。
import numpy as np
n_steps = 3
np.linspace(start=0, stop=100, num=n_steps)
array([ 0., 50., 100.])
n_steps = 4
np.linspace(start=0, stop=100, num=n_steps)
array([ 0. , 33.33333333, 66.66666667, 100. ])
编辑
如果您要查找整数,则可以转换为 int
数据类型:
import numpy as np
n_steps = 3
np.linspace(start=0, stop=100, num=n_steps, dtype=int)
array([ 0, 50, 100])
n_steps = 4
np.linspace(start=0, stop=100, num=n_steps, dtype=int)
array([ 0, 33, 66, 100])
对于纯 python(没有任何库)。
def generate_range(start, end, steps):
return [start + i*(end-start)/(steps-1) for i in range(steps)]
示例用法
generate_range(0, 100, 4)
# returns [0.0, 33.333333333333336, 66.66666666666667, 100.0]
generate_range(-200, 400, 5)
# returns [-200.0, -50.0, 100.0, 250.0, 400.0]
我想在两个数字之间创建一个列表,例如:
import numpy as np
np.arange(0,100,10)
输出:
array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
但是我不想定义步长,而是定义步数。如果我定义了 3 个步骤,那么我想得到这个列表:
array([ 0, 50, 100])
或4个步骤:
array([0, 33, 66, 100])
以此类推
我是否必须设置 4(对于所有值)或 2(仅对于插值)以获得最后的输出或者我是否正在获取数组或列表都没有关系。 rounds/ceils 的方式也无关紧要。创建这样的列表只是合乎逻辑的。
您可以继续使用np.arange
功能。您只需要根据最大值和最小值计算步长,以及步数:
import numpy as np
import math
nb_steps = 3
min_val = 0
max_val = 100
step_size = math.floor((max_val-min_val)/nb_steps)
arr = np.arange(min_val,max_val,step_size)
# update last value to match max_val
# this step is needed if (max_val-min_val)/nb_steps is a decimal number
arr[-1] = max_val
您也可以使用 numpy.linspace,正如评论中指出的那样:
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
https://numpy.org/doc/stable/reference/generated/numpy.linspace.html
def listWithNumberOfStep(startNumber, endNumber, nbSteps):
listNumber = []
delta = endNumber - startNumber
for i in range(nbSteps + 1):
listNumber.append(startNumber + (delta/nbSteps * i))
return listNumber
我觉得像这样就好了
even_arange = lambda n: np.arange(0, 101, 100/(n-1)).astype("int64")
even_arange(n)
或
from functools import partial
even_arnage = partial(start=0, stop=100, dtype="int64")
even_arange(num=n)
如评论中所述,numpy.linspace returns 在指定间隔内均匀分布数字。
import numpy as np
n_steps = 3
np.linspace(start=0, stop=100, num=n_steps)
array([ 0., 50., 100.])
n_steps = 4
np.linspace(start=0, stop=100, num=n_steps)
array([ 0. , 33.33333333, 66.66666667, 100. ])
编辑
如果您要查找整数,则可以转换为 int
数据类型:
import numpy as np
n_steps = 3
np.linspace(start=0, stop=100, num=n_steps, dtype=int)
array([ 0, 50, 100])
n_steps = 4
np.linspace(start=0, stop=100, num=n_steps, dtype=int)
array([ 0, 33, 66, 100])
对于纯 python(没有任何库)。
def generate_range(start, end, steps):
return [start + i*(end-start)/(steps-1) for i in range(steps)]
示例用法
generate_range(0, 100, 4)
# returns [0.0, 33.333333333333336, 66.66666666666667, 100.0]
generate_range(-200, 400, 5)
# returns [-200.0, -50.0, 100.0, 250.0, 400.0]