Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 修复将整数列表转换为NumPy矩阵的方法_Python_Python 3.x_Numpy - Fatal编程技术网

Python 修复将整数列表转换为NumPy矩阵的方法

Python 修复将整数列表转换为NumPy矩阵的方法,python,python-3.x,numpy,Python,Python 3.x,Numpy,我想创建随机整数,并通过NumPy矩阵将其转换为二进制格式。我编写了以下代码: def toBinary(C): l = [] for x in C: b = [int(i) for i in bin(x)[2:]] l = np.vstack((l, np.array(b))) return l list_vectors = [random.randint(0, 2 ** 64) for _ in range(2)] print(toB

我想创建随机整数,并通过NumPy矩阵将其转换为二进制格式。我编写了以下代码:

def toBinary(C):
    l = []
    for x in C:
        b = [int(i) for i in bin(x)[2:]]
        l = np.vstack((l, np.array(b)))
    return l

list_vectors = [random.randint(0, 2 ** 64) for _ in range(2)]
print(toBinary(list_vectors))
但我仍然不知道如何解决这个错误:

Traceback (most recent call last):
  File "test.py", line 31, in <module>
    print(toBinary(list_vectors))
  File "test.py", line 27, in toBinary
    l = np.vstack((l, np.array(b)))
  File "/anaconda3/lib/python3.6/site-packages/numpy/core/shape_base.py", line 234, in vstack
    return _nx.concatenate([atleast_2d(_m) for _m in tup], 0)
ValueError: all the input array dimensions except for the concatenation axis must match exactly
回溯(最近一次呼叫最后一次):
文件“test.py”,第31行,在
打印(toBinary(列表向量))
文件“test.py”,第27行,在toBinary中
l=np.vstack((l,np.array(b)))
文件“/anaconda3/lib/python3.6/site packages/numpy/core/shape_base.py”,第234行,在vstack中
返回_nx.concatenate([tup中的_m至少有_2d(_m)],0)
ValueError:除连接轴之外的所有输入数组维度必须完全匹配

非常感谢您的任何建议。

尝试此操作,它将返回列表而不是数组,因此如果您愿意,请进行必要的调整:

def toBinary(C):
    l = []
    for x in C:
        b = [i for i in bin(x)[2:]]
        a="".join(b)
        a=int(a)
        l.append(a)
return l

尝试此操作,它将返回一个列表而不是数组,因此如果愿意,请进行必要的调整:

def toBinary(C):
    l = []
    for x in C:
        b = [i for i in bin(x)[2:]]
        a="".join(b)
        a=int(a)
        l.append(a)
return l

这里的问题是,转换为二进制并不总是返回相同长度的二进制数。 如果C中的第一个整数是,比如说3,它将给出“0b11”。将其堆叠在数组中,然后尝试转换17。哎呀,您试图将'11'和'1001'连接在一起,这是行不通的

我在这里做的是,使用format()函数()将转换后的二进制数长度强制为10

此外,返回的数组是预先分配的,因为您现在完全知道它的大小:

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的最大值来找到最佳二进制长度。

这里的问题是,转换为二进制并不总是返回相同长度的二进制数。 如果C中的第一个整数是,比如说3,它将给出“0b11”。将其堆叠在数组中,然后尝试转换17。哎呀,您试图将'11'和'1001'连接在一起,这是行不通的

我在这里做的是,使用format()函数()将转换后的二进制数长度强制为10

此外,返回的数组是预先分配的,因为您现在完全知道它的大小:

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的最大值来找到最佳二进制长度。

打印(np.array(b.shape)给了您什么?打印(np.array(b.shape)给了您什么?