[英]Python: how to get all the first values row-wise from a 2D numpy array when using a 2D boolean mask
我有兩個大型二維數組,一個帶有值,另一個帶有“有效”值的掩碼。
vals = np.array([
[5, 2, 4],
[7, 8, 9],
[1, 3, 2],
])
valid = np.array([
[False, True, True],
[False, False, True],
[False, True, True],
])
我的目標是在valid==True
時為每一行獲取第一個值,並以最快的方式獲取該類型的向量: [2, 9, 3]
。
我嘗試應用掩碼並從中查詢,但它破壞了結構:
vals[valid]
> array([2, 4, 9, 3, 2])
我嘗試遍歷所有索引,但我想知道是否有更快的矢量化方法來做到這一點。 謝謝!
嘗試:
vals[np.arange(len(vals)), np.argmax(valid,axis=1)]
或者使用np.take_along_axis
:
np.take_along_axis(vals, np.argmax(valid,axis=1)[:,None], axis=1).ravel()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.