3 回答
TA贡献1842条经验 获得超21个赞
如果所有字符串的长度相同(这对于构建连续数组至关重要),则使用view来有效地分隔字符。
r = np.array(example_list)
r = r.view('<U1').reshape(*r.shape, -1).astype(int)
print(r)
array([[0, 1, 0],
[1, 0, 1]])
你也可以走列表理解路线。
r = np.array([[*map(int, list(l))] for l in example_list])
print(r)
array([[0, 1, 0],
[1, 0, 1]])
TA贡献1966条经验 获得超4个赞
你可以这样做map
:
example_array = map(lambda x: map(lambda y: int(y), list(x)), example_list)
外部对 中的每个项目lambda
执行list(x)
操作example_list
。例如,'010' => ['0','1','0']
。内部lambda
将单个字符(来自 的结果list(x)
)转换为整数。例如,['0','1','0'] => [0,1,0]
。
TA贡献1936条经验 获得超6个赞
最简单的方法是使用列表推导式,因为它会自动为您生成输出列表,可以轻松地将其转换为 numpy 数组。您可以使用多个 for 循环来执行此操作,但随后您就无法创建列表、子列表并附加到它们。虽然不难,但使用列表推导式的代码看起来更优雅。
试试这个:
newList = np.array([[int(b) for b in a] for a in example_list])
newList 现在看起来像这样:
>>> newList
... [[0, 1, 0], [1, 0, 1]]
注意:此时不需要调用 map,尽管这确实有效。
那么这里发生了什么?我们正在逐项遍历您的原始字符串列表 (example_list),然后遍历当前项中的每个字符。在功能上,这相当于...
newList = []
for a in example_list:
tmpList = []
for b in a:
tmpList.append(int(b))
newList.append(tmpList)
newList = np.array(newList)
就个人而言,我发现多个 for 循环对于初学者来说更容易理解。然而,一旦你掌握了列表推导式,你可能就不想回去了。
添加回答
举报