Python 如何将二进制字符串列表放入2D数组

Python 如何将二进制字符串列表放入2D数组,python,numpy,Python,Numpy,我有一个字符串数字的二进制列表,如下所示: ['0b111', '0b1110011', '0b1110100', '0b11101001', '0b1100111', '0b1100001', '0b1101110', '0b1101111'] array([[0, 0, 0, 0, 0, 1, 1, 1], [0, 1, 1, 1, 0, 0, 1, 1], [0, 1, 1, 1, 0, 1, 0, 0], [1, 1, 1, 0,

我有一个字符串数字的二进制列表,如下所示:

['0b111',
 '0b1110011',
 '0b1110100',
 '0b11101001',
 '0b1100111',
 '0b1100001',
 '0b1101110',
 '0b1101111']
array([[0, 0, 0, 0, 0, 1, 1, 1],
       [0, 1, 1, 1, 0, 0, 1, 1],
       [0, 1, 1, 1, 0, 1, 0, 0],
       [1, 1, 1, 0, 1, 0, 0, 1],
       [0, 1, 1, 0, 0, 1, 1, 1],
       [0, 1, 1, 0, 0, 0, 0, 1],
       [0, 1, 1, 0, 1, 1, 1, 0],
       [0, 1, 1, 0, 1, 1, 1, 1]], dtype=uint8)
我想把这个列表放入一个二维整数数组中,如下所示:

['0b111',
 '0b1110011',
 '0b1110100',
 '0b11101001',
 '0b1100111',
 '0b1100001',
 '0b1101110',
 '0b1101111']
array([[0, 0, 0, 0, 0, 1, 1, 1],
       [0, 1, 1, 1, 0, 0, 1, 1],
       [0, 1, 1, 1, 0, 1, 0, 0],
       [1, 1, 1, 0, 1, 0, 0, 1],
       [0, 1, 1, 0, 0, 1, 1, 1],
       [0, 1, 1, 0, 0, 0, 0, 1],
       [0, 1, 1, 0, 1, 1, 1, 0],
       [0, 1, 1, 0, 1, 1, 1, 1]], dtype=uint8)
我首先删除了二进制序列的“0b”,并将其放入res列表中。然后我创建了一个2D数组,以便将我的列表放入其中。我试着做一个双循环,但我有点困惑:

 res = []
    for i in range(len(conv_bin)):
        res.append(conv_bin[i][2:])
    arr = np.array(res)
    arr2 = np.zeros((8,8))
    for i in range(arr.shape[0]):
        for j in range(arr2.shape[0]):
            arr2[i] = arr[j]
您可以使用numpy函数来提供帮助

将numpy导入为np
conv_bin=['0b111',
'0b1110011',
'0b1110100',
'0b11101001',
'0b1100111',
'0b1100001',
'0b1101110',
“0b1101111”]
np.unpackbits(np.array([[int(s,2)],用于conv_bin中的s),dtype=np.uint8,axis=1)
您可以使用numpy功能提供帮助

将numpy导入为np
conv_bin=['0b111',
'0b1110011',
'0b1110100',
'0b11101001',
'0b1100111',
'0b1100001',
'0b1101110',
“0b1101111”]
np.unpackbits(np.array([[int(s,2)],用于conv_bin中的s),dtype=np.uint8,axis=1)

如果要使用for循环,可以使用以下选项:

import numpy as np
conv_bin=['0b111',
 '0b1110011',
 '0b1110100',
 '0b11101001',
 '0b1100111',
 '0b1100001',
 '0b1101110',
 '0b1101111']
res =[]
for string in conv_bin:
    ls=[]
    string=string[2:]
    for ch in string:
        ls.append(ch)
    res.append(ls)

如果要使用for循环,可以使用以下选项:

import numpy as np
conv_bin=['0b111',
 '0b1110011',
 '0b1110100',
 '0b11101001',
 '0b1100111',
 '0b1100001',
 '0b1101110',
 '0b1101111']
res =[]
for string in conv_bin:
    ls=[]
    string=string[2:]
    for ch in string:
        ls.append(ch)
    res.append(ls)
  • 我认为,使用我在下面编写的解决方案,您可以避免创建多个新列表,如res和arr2
  • 一个简单的解决方案是以相反的顺序遍历二进制矩阵
PS-如果您不知道,在python中,您可以像这样从反面索引数组:
arr[-1]->数组的最后一个元素
arr[-2]>最后一个元素
arr[-3]->最后两个元素,依此类推

希望我的回答清楚

  • 我认为,使用我在下面编写的解决方案,您可以避免创建多个新列表,如res和arr2
  • 一个简单的解决方案是以相反的顺序遍历二进制矩阵
PS-如果您不知道,在python中,您可以像这样从反面索引数组:
arr[-1]->数组的最后一个元素
arr[-2]>最后一个元素
arr[-3]->最后两个元素,依此类推

希望我的回答已经很清楚了