有沒有辦法在沒有 for 回圈的情況下完成下面的代碼?
我根據它的索引位置將 int 值分配給 str 。
import numpy as np
icing_types=[
"none",
"l-mixed",
"l-rime",
"l-clear",
"m-mixed",
"m-rime",
"m-clear",
]
idx=np.array(icing_types)
#validtime=basetime index hr
forecast_icing=[
"none",
"none",
"l-rime",
"m-rime"
]
arr=np.array([np.where(ice==idx)for ice in forecast_icing]).flatten()
uj5u.com熱心網友回復:
借用這個答案,您可以生成地圖并對函式進行矢量化。值得注意的是,這里的另一個答案更快。
import numpy as np
icing_types=[
"none",
"l-mixed",
"l-rime",
"l-clear",
"m-mixed",
"m-rime",
"m-clear",
]
forecast_icing=np.array([
"none",
"none",
"l-rime",
"m-rime"
])
np.vectorize({b:a for a,b in enumerate(icing_types)}.get)(forecast_icing)
uj5u.com熱心網友回復:
In [103]: arr = np.array(forecast_icing)
In [104]: idx,arr
Out[104]:
(array(['none', 'l-mixed', 'l-rime', 'l-clear', 'm-mixed', 'm-rime',
'm-clear'], dtype='<U7'),
array(['none', 'none', 'l-rime', 'm-rime'], dtype='<U6'))
我們可以使用以下方法相互測驗 2 個陣列:
In [105]: arr[:,None]==idx
Out[105]:
array([[ True, False, False, False, False, False, False],
[ True, False, False, False, False, False, False],
[False, False, True, False, False, False, False],
[False, False, False, False, False, True, False]])
指標True如下:
In [106]: np.where(_)
Out[106]: (array([0, 1, 2, 3]), array([0, 0, 2, 5]))
第二個陣列給出了arrin的匹配項idx:
In [107]: _[1]
Out[107]: array([0, 0, 2, 5])
如果你能保證一場而且只有一場比賽,我認為你不需要做任何更有趣的事情。
uj5u.com熱心網友回復:
沒有,但我不是 100% 確定。
無論如何,即使有,您也可以通過使用映射 dict (icing_type -> idx) 獲得更好的性能:
icing_type_to_idx = {icinig_type: idx for idx, icing_type in enumerate(icing_types)}
arr = np.array([icing_type_to_idx[ice] for ice in forecast_icing])
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/352624.html
