Я хочу написать в Python функцию, которая принимает массив целых чисел больше 0 A
и целое число c > 0
и возвращает все возможные увеличивающиеся последовательности длины c
всех подмножеств A
.
Например, предположим, что A = np.array([1,2])
и c = 3
. Я хочу создать что-то вроде этого:
[-,-,-], [-,-,1], [-,1,-], [1,-,-], [-,-,2], [-,2,-], [2,-,-], [1,2,-], [1,-,2],[-,1,2]
Однако нерастущие последовательности, такие как [-,2,1]
, и последовательности, которые не имеют длины c
, такие как [1,-]
, являютсяне принимается.
Я написал следующий код на python, представляющий -
с нулями, например, [1,-,-] -> [1,0,0]
:
import numpy as np
def gen_seq(A, c):
# base case:
if c == 0:
return np.array([])
if len(peaks) == 1:
Z0 = np.zeros([c,1])
Z = np.zeros([c,1])
for i in range(c):
temp_Z = np.copy(Z0)
temp_Z[i] = A
Z = np.concatenate((Z, temp_Z), axis = 1)
return Z
Z = np.zeros([c,1])
for i in range(1,c+1):
left_side = gen_seq(np.array([peaks[0]]),i)
right_side = gen_seq(peaks[1:], c-i)
if len(left_side)!=0 and len(right_side)!=0:
temp_Z = np.zeros([c,left_side.shape[1]*right_side.shape[1]])
counter = 0;
for l in left_side.T:
for r in right_side.T:
temp_Z[:,counter] = np.concatenate((l,r), axis = 0)
counter += 1
elif len(left_side)!= 0 and len(right_side)==0:
temp_Z = left_side
elif len(left_side)== 0 and len(right_side)!=0:
temp_Z = right_side
else:
pass
Z = np.concatenate((Z, temp_Z), axis = 1)
return np.unique(Z, axis = 1)
Но для A=[1,2,3]
и c = 4
код делаетгенерировать [2,3,-,-]
.