【问题标题】:Numpy - Slicing - Step checkNumpy - 切片 - 步骤检查
【发布时间】:2026-01-26 09:35:02
【问题描述】:

如何使用 Numpy 找出数组的步数。

input = np.array([1,2.1,3.5,4,5,6,7,8,9])
step = 2
output = [1,3,5,7,9]

基本上,如果元素高于声明数字 (1) 且低于步骤(上例中为 2),则不要形成另一个数字。但如果输入元素高于前一个数字 (1) + 步骤,则形成另一个在本例中为 3。

这是另一个例子:

input = np.array([1,2.1,3.5,4,5,6,7,8,9])
step = 3
output = [1,4,7]

如何做到这一点?谢谢!

【问题讨论】:

  • [1,2,1,3,5,4,5,6,7,8,9] 还是[1,2.1,3.5,4,5,6,7,8,9]
  • 为什么你的第一个输出样本包含3?请注意,输入中不存在3
  • 看起来更像是一个列表问题,专注于一系列值,而不是作为一个整体考虑的所有值。写一个列表版本,也许我们可以提出改进的方法。

标签: python numpy numpy-ndarray


【解决方案1】:

由于您的第一个输出样本包含3输入存在, 我假设你想得到类似 np.arange,

  • 输入[0]开始,
  • 停在input的最后一个元素(input[-1]),
  • 使用给定的步骤
  • 作为普通列表(不是 Numpy 数组),

并且这个序列的元素不需要出现在输入中。

但您希望 input 的最后一个元素包含在结果中, 如果它“适合”到目前为止生成的序列(即 这个序列(到目前为止 7)+ step == input[-1])。

要生成这样的序列,您可以使用以下函数:

def stepFilter(arr, step):
    frstElem = arr[0]
    lastElem = arr[-1]
    seq = np.arange(frstElem, lastElem, step)
    if seq[-1] + step == lastElem:
        seq = np.append(seq, lastElem)
    return seq.tolist()

【讨论】: