У меня есть несколько чисел, и я хочу сделать из них несколько пар. Это мои данные:
points=np.arange(0,10)
И этот массив определяет, как создавать пары:
repetition= np.array([1, 1, 2, 3, 3])
Затем я хочу создать такие пары:
[(0, 1), (1, 2), (2, 4), (3, 5), (4, 7), (5, 8), (6, 9)]
Я пробовал следующий код, но он не дает мне того, что я хочу:
L=[]
k=0
for r in repetition:
last= k+r
L.append(points[k:last])
k= last
lmax= len(max(L,key=len))
L=[ np.concatenate((np.full(lmax-len(l),None),l)) for l in L ]
L= [[e for e in l if e] for l in zip(*L)]
result= sorted([p for l in L for p in zip(l,l[1:])])
Я также загрузил фигу, чтобы уточнить мой запрос. красные линии соединяют пары. На самом деле, мои данные намного сложнее, но они выполняют ту же роль. repetition
определяет, что каждое значение points
должно быть связано с каким. Заранее, я ценю любую помощь. Спасибо, что уделили время.
код:
repetition= np.array([1, 1, 2, 3, 3])
pairs = []
value = 0
for r in repetition:
subpairs = np.arange(r)
for s in subpairs:
n = len(subpairs)
a = value+s
b = value+s+n
pairs.append((a,b))
value += n
результат:
[(0, 1), (1, 2), (2, 4), (3, 5), (4, 7), (5, 8), (6, 9), (7, 10), (8, 11), (9, 12)]
Уважаемый @fullfin. Спасибо за большую помощь. Это именно то, что мне нужно. Всего один комментарий. Он дает мне индексы. КАК я могу получить реальные данные? На самом деле мои данные не начинаются с 0. А также как я могу избавиться от баллов, созданных после окончания моего лимита? Я имею в виду, что мне не нужны пары после (6,9)
. В очередной раз благодарим за помощь.
Если вы откроете другой вопрос о стеке, я отвечу вам там.
Дорогой @Ashutosh Kumar, я хочу соединить их точно так же, как
repetition
. Первое значение вrepetition
равно1
, поэтому первая переменная должна быть соединена со следующей. Для второгоrepetition
это1
, поэтому его нужно соединить со следующим. Для третьей переменнойpoints
вrepetition
мы достигаем2
: это означает, что переменные с номерами 3 и 4 изpoints
должны быть связаны со своими следующими двумя переменными (2 с 4 и 3 с 5). Для пятой переменнойpoints
число вrepetition
равно 3, что означает, что переменные с именами 4, 5 и 6 должны быть соединены с 7, 8, 9 соответственно.