Напишите функцию на python, которая генерирует все возможные увеличивающиеся последовательности - PullRequest
0 голосов
/ 27 октября 2019

Я хочу написать в 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,-,-].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...