我似乎找不到一種有效的方法來做到這一點。問題是這樣的:如果我這樣做coords = np.where(A==0),其中 A 是一個 numpy 2d 陣列,我會得到兩個 np 陣列的元組,一個包含 x 坐標(滿足條件的點的)和一個 y 坐標陣列的陣列,例如,(array([0, 0, 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3]), array([0, 1, 2, 3, 0, 1, 0, 1, 2, 3, 0, 1, 3])). 我怎么知道給定的點是否(0,0)存在于這個元組中(而不必將元組更改為另一個結構)?
uj5u.com熱心網友回復:
np.where如果您不想要這兩個索引陣列,請不要使用。A==0將回傳一個布爾陣列,這可能正是您想要的,如果您需要檢查特定索引以查看檢查是否為真。
mask = A==0
if mask[x,y]: # where x and y are set somewhere above...
# do stuff
當然,如果您正在做的事情是numpy相關的,一次檢查一個索引可能比某種更廣泛的檢查(允許您執行廣播操作)效率低。舉例來說,你可以改變所有的0陣列中的值1與此代碼:
A[mask] = 1
或者這個,它相當于abs(將掩碼保存為單獨的變數會更有效,但我在這個例子中沒有這樣做來說明它不是絕對必要的):
A[A < 0] = -A[A < 0]
uj5u.com熱心網友回復:
即使它不是最佳的argwhere,您也可以使用而where不是(閱讀@Blcknght 的答案)
>>> (np.argwhere(A == 0) == [0, 0]).all(1).any()
True
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/344670.html
