我想使用numpy.where函式來檢查一個陣列中的元素是否是某個字串,比如說咖啡,然后在這是真的地方回傳某個向量,而在不是這樣的地方回傳另一個向量。
然而,我一直收到錯誤資訊,說運算元不能與形狀廣播在一起 (4,) (1,3) (1,3)。
我是否有其他方法可以做到這一點,而不需要過多地使用for回圈(問題中明確說我不應該使用它們)?
lst_1 = np. array(["dog"/span>, "dog1"/span>, "dog2"/span>, "dog3"/span>] )
a = np. where(lst_1 == "dog", [[1, 0, 0]], [[0,0,0]] )
print(a)
uj5u.com熱心網友回復:
可以作為一個單行代碼:
out = np. array([[0,0, 0], [1,0,0]])
idx = lst_1 == dog
out[idx.astype(np.int32)]。
另一種避免鑄造的方法:
np. take([[0,0,0], [1, 0,0]], lst_1 == "dog", axis=0)
uj5u.com熱心網友回復:
如果你想在沒有for回圈的情況下做到這一點,你可以使用lambda函式:
lst_1 = np. array(["dog"/span>, "dog1"/span>, "dog2"/span>, "dog3"/span>] )
a = list(map(lambda x: [1,0, 0] if x=='dog else [0。 0,0], lst_1))
print(a)
> [[1, 0, 0] 。[0, 0, 0] 。[0, 0, 0], [0, 0]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/326868.html
標籤:
