Python: преобразование двоичного числа в десятичное - PullRequest
0 голосов
/ 23 апреля 2020

В настоящее время я занимаюсь реализацией алгоритмов Geneti c. Я написал свои методы кроссовера и мутации, и сейчас я пишу свой метод Fitness.

Мне нужно преобразовать мой список 0 и 1 в десятичные значения для вычисления расстояния.

Мой текущий вывод, с которым я работаю, это список целочисленных значений 1 и 0. (Пример ниже):

[[0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1], [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1]]
<class 'list'> 

Я хочу преобразовать эти числа в их уважаемый двоичный эквивалент. Я попытался преобразовать список в группы по 4, а затем вызвать функцию binaryToDecimal для преобразования битов в десятичные значения. Тем не менее, я получаю сообщение об ошибке 'TypeError:' numpy .ndarray 'объект не вызывается'. Я суммировал мой код, и вот так он выглядит.

def converting_binary_to_decimal(L):
    output = []
    for l in L:
        l = list(map(str, l))
        sub_output = []
        for j in range(0, len(l)-1, 4):
            sub_output.append(int(''.join(l[j:j+4]), 2))
        output.append(sub_output)
    return output

def chunks(L, n):
    for i in range(0, len(L), n):
        yield L[i:i+n]

def fitness(child):
    newList1=list(chunks(child[0], 4))
    newList2=list(chunks(child[1], 4)) 

if __name__ == "__main__":
    myFitness = fitness(afterMU)

Пример вывода того, что я хочу: [[0, 13, 6, 8, 12, 8, 10, 9 , 15], [0, 8, 7, 0, 4, 4, 1, 8, 15]]

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Я думаю, я понял это.

 x=[0, 1, 1, 0]
        k = 4
        n = len(x)//k
        for i in range(n):
            y = x[i*k:(i+1)*k]
            y = [str(j) for j in y]
            y = ''.join(y)
            y = int(y,2)
            print(y)

Спасибо.

0 голосов
/ 23 апреля 2020

Попробуйте этот код.

def converting_binary_to_decimal(L):
    output = []
    for l in L:
        l = list(map(str, l))
        sub_output = []
        for j in range(0, len(l)-1, 4):
            sub_output.append(int(''.join(l[j:j+4]), 2))
        output.append(sub_output)
    return output


L = [[0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]]

converting_binary_to_decimal(L) 
...