使用两个不同的间距值在Python中创建数组

使用两个不同的间距值在Python中创建数组,python,arrays,numpy,Python,Arrays,Numpy,我想在python中创建一个数组,在值2n和2n+1之间有一个固定的间距,在值2n+1和2n+2之间有另一个不同的间距 我想创建一个如下所示的数组,只指定初始点、最终点和我要使用的两个不同间距: x = [0 0.25 0.75 1 1.5 1.75] 在这种情况下,这些值将分别为0和2以及(0.25,0.5)的间距 是否可以使用预定义的函数执行此操作? 我在numpy软件包中找不到此功能。请尝试以下操作: np.cumsum(np.tile([0.25, 0.5], 9)) 如果你想在0前

我想在python中创建一个数组,在值2n和2n+1之间有一个固定的间距,在值2n+1和2n+2之间有另一个不同的间距

我想创建一个如下所示的数组,只指定初始点、最终点和我要使用的两个不同间距:

x = [0 0.25 0.75 1 1.5 1.75]
在这种情况下,这些值将分别为0和2以及(0.25,0.5)的间距

是否可以使用预定义的函数执行此操作?
我在numpy软件包中找不到此功能。

请尝试以下操作:

np.cumsum(np.tile([0.25, 0.5], 9))

如果你想在0前面加一个前缀,把它用np.insert(x,0,0)我认为一个问题是计算元素的数量,这可能是不明确的,取决于你想在端点发生什么。这是一个如何处理它的示例,不过我需要稍后再看一看,看它是否有意义。我从@Mauris的答案中选择了
cumsum
tile
组合

import numpy as np

def spaced_array(start, end, spacings):
    step = sum(spacings)

    # how many steps in total can we take? (upper bound)
    repeats = int(np.ceil((end - start) / step))
    n = repeats * len(spacings)

    arr = np.full(n, start)
    arr[1:] += np.cumsum(np.tile(spacings, repeats))[:n-1]

    return arr

spacings = [0.25, 0.5]
print(spaced_array(0, 2, spacings))
print(spaced_array(0, 5, spacings))

正如@YXD的解决方案中所讨论的那样,为一般情况确定输出数组的长度可能很棘手。假设要在添加了第二个间距的点结束,可以初始化零数组,将起始值作为第一个元素,然后交替放置第一个和第二个间距,最后进行累加以获得所需的输出。这里有一个实现,可以在这些方面实现一些东西-

# Random inputs
start_pt = 0.25
final_pt = 2.85

spacing1 = 0.15
spacing2 = 0.50

# Estimate length of output array
N = 1+2*int(np.ceil((final_pt - start_pt)/(spacing1+spacing2)))

# Setup values array that holds the starting point as the first element
#  and then spacing1 and spacing2 alternately
vals = np.zeros(N)
vals[0] = start_pt
vals[1::2] = spacing1
vals[2::2] = spacing2

# Finally, do cumsum to get the desired output
out = vals.cumsum()
使用列出的输入输出-

In [134]: out
Out[134]: array([ 0.25,  0.4 ,  0.9 ,  1.05,  1.55,  1.7 ,  2.2 ,  2.35,  2.85])

如果你想要在每一点之后都有不同的手动间隔,那么你必须自己写,我只是发现这段代码有一个小缺点。您总是以上一个元素加上您选择的第二个间距结束数组。但在数组末尾追加或删除元素确实很容易解决。