我有一个像这样的坐标数组:
array = [[1,6],[2,6],[3,8],[4,10],[5,6],[5,7],[18,6],[19,5],[17,9],[10,5]]
我想在6
之间拆分数组。和7
。协调([5,7],[18,6])
,因为那里的X
值存在差距。我想获得两个独立的数组arr1
和arr2
,其中arr1
是拆分前的值,arr2
是后面的值。
我想说,如果下一个X
值大于10
的差值,它会附加到arr2
,否则arr1
,如下所示:
arr1 = []
arr2 = []
for [x,y] in array:
if next(x) > 10:
arr2.append(x,y)
else:
arr1.append(x,y)
有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
这可能就是你要找的东西
array = [[1,6],[2,6],[3,8],[4,10],[5,6],[5,7],[18,6],[19,5],[17,9],[10,5]]
# Declare two array variables
arr1 = None
arr2 = None
n = len(array)
for i in range(n-1):
if abs(array[i][0] - array[i+1][0]) >= 10:
arr1 = array[:i+1]
arr2 = array[i+1:]
break
print arr1
print arr2
答案 1 :(得分:2)
如果我正确地得到了您的问题,那么您尝试在第一个点处拆分数组,其中两个后续x值之间的差值大于10。 你可以使用numpy来做到这一点:
import numpy as np
THRESH = 10
array = [[1,6],[2,6],[3,8],[4,10],[5,6],[5,7],[18,6],[19,5],[17,9],[10,5]]
array = np.asarray(array)
deltas_x = np.abs(array[1:,0] - array[:-1,0])
split_idx = np.where(deltas_x > THRESH)[0][0] + 1
arr1 = array[:split_idx,:]
arr2 = array[split_idx:,:]
请注意,我们需要在np.where的结果中加1,以说明deltas_x
数组的值比array
短1个
答案 2 :(得分:1)
可能最容易迭代连续对并在找到间隙后立即拆分:
array = [[1,6],[2,6],[3,8],[4,10],[5,6],[5,7],[18,6],[19,5],[17,9],[10,5]]
for idx, (cur, nxt) in enumerate(zip(array, array[1:])): # successive pairs and index
if abs(cur[0] - nxt[0]) > 10: # compare difference of first items
arr1, arr2 = array[:idx+1], array[idx+1:] # split
break # no further splits, end the loop now
else: # no break, keep the original array
arr1, arr2 = array, []
给出了:
>>> arr1
[[1, 6], [2, 6], [3, 8], [4, 10], [5, 6], [5, 7]]
>>> arr2
[[18, 6], [19, 5], [17, 9], [10, 5]]
如果你想多次拆分会有点困难,但在你的情况下这应该很好。
答案 3 :(得分:1)
您可以执行以下操作:
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:]
然后dif
将是:
array([ 1, 1, 1, 1, 0, 13, 1, -2, -7])
fi
为5,ar1
和ar2
为:
array([[ 1, 6],
[ 2, 6],
[ 3, 8],
[ 4, 10],
[ 5, 6],
[ 5, 7]])
和
array([[18, 6],
[19, 5],
[17, 9],
[10, 5]]),
分别
这也可以让您获得数据的所有跳转(您只需将fi = np.where(abs(dif) > 10)[0][0]
更改为fi = np.where(abs(dif) > 10)[0]
)
答案 4 :(得分:1)
比较连续元素时,我通常使用枚举:
array = [[1,6],[2,6],[3,8],[4,10],[5,6],[5,7],[18,6],[19,5],[17,9],[10,5]]
arr1 = list()
arr2 = list()
gap = 10
for index, value in enumerate(array[:-1]): # [:-1] prevents out of range
if abs(value[0]-array[index+1][0]) >= gap:
arr1.append(value)
else:
arr2.append(value)
arr2.append(array[-1]) # Take into account that the last element needs to be added to one of the arrays.
答案 5 :(得分:0)
arry1 = []
arry2 = []
for i in arry:
if (i[0] - i[1]) > 10:
arry1.append(i)
else:
arry2.append(i)
答案 6 :(得分:-1)
试试这个:
prev = array[0][0]
pos = -1
for i in range (1, len(array)):
if array[i][0] - prev >1:
break
else:
prev = array[i][0]
if pos != -1:
arr1 = array[:pos]
arr2 = array[pos:]
这应该按照你想要的方式分割array
。请注意,列表的编号为0。