3 回答

TA貢獻1842條經驗 獲得超22個贊
如果所有字符串的長度相同(這對于構建連續數組至關重要),則使用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條經驗 獲得超7個贊
最簡單的方法是使用列表推導式,因為它會自動為您生成輸出列表,可以輕松地將其轉換為 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 循環對于初學者來說更容易理解。然而,一旦你掌握了列表推導式,你可能就不想回去了。
添加回答
舉報