Проблема в том, что преобразование в двоичное не всегда возвращает двоичное число одинаковой длины.
Если первое целое число в C, скажем, 3, оно даст «0b11». Сложите это в массив, затем попытайтесь преобразовать 17. Ой, вы пытаетесь объединить '11' и '1001' вместе, это не сработает.
То, что я сделал здесь, это приведение длины преобразованного двоичного числа к 10 с помощью функции format () ( Преобразование в двоичное и сохранение ведущих нулей в Python ).
import numpy as np
import numpy.random as random
def toBinary(C):
binaries_length = 10
bin_format = f'#0{binaries_length+2}b'
array_rows = len(C)
l = np.empty((array_rows, binaries_length))
for i, x in enumerate(C):
l[i,:] = np.array([int(i) for i in format(x, bin_format)[2:]])
return l
list_vectors = [random.randint(0, 2 * 64) for _ in range(10)]
print(toBinary(list_vectors))
Кроме того, возвращаемый массив предварительно выделен, поскольку теперь вы точно знаете, какой он будет:
binaries_length = 10
bin_format = f'#0{10+2}b'
array_rows = len(C)
l = np.empty((array_rows, binaries_length))
Кстати, вызов random.randint (0, 2 ** 64) также вызывает исключение, потому что 2 ** 64 слишком велико, поэтому я изменил его на 2 * 64.
Чтобы пойти дальше, вы можете найти оптимальную двоичную длину, найдя максимум C.