根据 Python 中的数组值拆分数组

agr*_*rom 5 python arrays split

我有一个像这样的坐标数组:

array = [[1,6],[2,6],[3,8],[4,10],[5,6],[5,7],[18,6],[19,5],[17,9],[10,5]]
Run Code Online (Sandbox Code Playgroud)

我想将数组拆分为6. 和7。协调,([5,7],[18,6])因为那里的值存在差距X。我想得到两个单独的数组,arr1arr2,其中arr1是分割之前的值,arr2是分割之后的值。

我想说,如果下一个X值大于 的差值10,它将附加到arr2, else arr1,如下所示:

arr1 = []
arr2 = []
for [x,y] in array: 
    if next(x) > 10:
        arr2.append(x,y)
    else:
        arr1.append(x,y)
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题吗?

Cle*_*leb 2

您可以执行以下操作:

ar = np.array([[1,6],[2,6],[3,8],[4,10],[5,6],[5,7],[18,6],[19,5],[17,9],[10,5]])

# get differences of x values
dif = ar[1:, 0] - ar[:-1, 0]

# get the index where you first observe a jump
fi = np.where(abs(dif) > 10)[0][0]

ar1 = ar[:fi+1]
ar2 = ar[fi+1:]
Run Code Online (Sandbox Code Playgroud)

那么dif将是:

array([ 1,  1,  1,  1,  0, 13,  1, -2, -7])
Run Code Online (Sandbox Code Playgroud)

fi将为 5 并且ar1ar2将为:

array([[ 1,  6],
       [ 2,  6],
       [ 3,  8],
       [ 4, 10],
       [ 5,  6],
       [ 5,  7]])
Run Code Online (Sandbox Code Playgroud)

array([[18,  6],
       [19,  5],
       [17,  9],
       [10,  5]]),
Run Code Online (Sandbox Code Playgroud)

分别。

这也将允许您获得数据中的所有跳转(您只需更改fi = np.where(abs(dif) > 10)[0][0]fi = np.where(abs(dif) > 10)[0]