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

时间:2015-07-22 13:54:02

标签: 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包中找到这个功能。

3 个答案:

答案 0 :(得分:4)

试试这个:

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

如果您想要添加零,请将其包装在np.insert(x, 0, 0)

答案 1 :(得分:2)

我认为一个问题是计算元素的数量,这可能是模棱两可的,这取决于你想要在终点发生什么。这是一个如何处理它的例子,虽然我稍后需要再看一下它是否有意义。我从@Mauris的答案中取得了cumsumtile组合。

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))

答案 2 :(得分:2)

确定一般情况下输出数组的长度可能很棘手,正如@ 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])