使用两个不同的间距值在Python中创建数组
我想在python中创建一个数组,在值2n和2n+1之间有一个固定的间距,在值2n+1和2n+2之间有另一个不同的间距 我想创建一个如下所示的数组,只指定初始点、最终点和我要使用的两个不同间距:使用两个不同的间距值在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前
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])
如果你想要在每一点之后都有不同的手动间隔,那么你必须自己写,我只是发现这段代码有一个小缺点。您总是以上一个元素加上您选择的第二个间距结束数组。但在数组末尾追加或删除元素确实很容易解决。