将扁平化的数组值转换为列向量

3

我有一个由字符串表示的3进制数字数组:

['1', '2', '10']

我希望将每个数字填充为三位数,以便每个数字占用的最大空间均为三位。

['001', '002', '010']

然后将其转换为矩阵,如下所示:
[[0, 0, 0],
[0, 0, 1],
[1, 2, 0]]

那就是将每个字符串条目转换为列向量。我尝试了旋转、转置,但不确定最佳方法是什么。
谢谢。

你需要中间步骤吗,还是直接生成矩阵就可以了? - jpp
只需要矩阵;如果有更好的方法可以在没有中间步骤的情况下获得它,那就太好了!谢谢 - epic556
我在下面发布了一个解决方案,可以提供列表和numpy数组。 - jpp
@epic566,如果以下任何答案有帮助,请随意接受其中之一(左侧的勾号),以便其他用户可以看到经过测试的解决方案。 - jpp
4个回答

3
这是一种方法。我没有将中间步骤分开,但很容易做到。
lst = ['1', '2', '10']
result = list(zip(*(map(int, i.zfill(3)) for i in lst)))

如果您需要一个 numpy 数组:
import numpy as np
arr = np.array(result)

# array([[0, 0, 0],
#        [0, 0, 1],
#        [1, 2, 0]])

3
使用str.zfill可以填充零,然后使用np.dstack将其转换为期望的格式:
In [106]: np.dstack([list(i.zfill(3)) for i in a])[0].astype(np.int)
Out[106]: 
array([[0, 0, 0],
       [0, 0, 1],
       [1, 2, 0]])

1
你可以使用 numpy.char 模块,该模块提供了许多字符串操作的向量化版本:
>>> import numpy as np
>>> 
>>> a = np.array((1,2,10),'U2')
>>> a
array(['1', '2', '10'],
      dtype='<U2')
>>> 
>>> b = np.char.zfill(a, 3)
>>> b
array(['001', '002', '010'],
      dtype='<U3')
>>> 
>>> c = b.view('U1').reshape(3, 3).T.astype(int)
>>> c
array([[0, 0, 0],
       [0, 0, 1],
       [1, 2, 0]])

0
尝试以下代码。 说明已添加为注释:
lst = ['1', '2', '10']       # input list
outlist = []                 # empty output list
for i in lst:
    while len(i) <3:
        i = '0'+i           # add leading 0s
    outlist.append(list(i)) # string converted to list and added to output list

# convert to np.array, then to integers, transpose and convert back to list:
outlist = np.array(outlist).astype(np.int).T.tolist()    
print(outlist)

输出:

[[0, 0, 0], [0, 0, 1], [1, 2, 0]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接