1 回答

TA貢獻1886條經驗 獲得超2個贊
假設您的字段覆蓋了相同大小的條柱,則無需顯式定義條柱。 可以從簡單的樓層劃分確定每個位置,因為您知道每個箱子的大小。我建議使用總寬度(您傳入的內容),而不是,如果您當然知道范圍的預期大小。mask*_bin_idx1 / N1 - 0np.random.uniformx.max() - x.min()
x0 = 0 # or x.min()
x1 = 1 # or x.max()
x_bin = (x1 - x0) / N
x_bin_idx = ((x - x0) // x_bin).astype(int)
# ditto for y
這將比數字化更快,更簡單,并且可以避免在開始時出現額外的箱子。
對于大多數目的,您不需要 。90%的問題(包括這個問題)不應該使用。如果您想要一種快速訪問 和 的必要元素的方法,只需使用布爾掩碼即可。面具很簡單np.wherewherexy
selction = mask[x_bin_idx, y_bin_idx].astype(bool)
如果已經是布爾值(無論如何都應該是布爾值),則表達式就足夠了。它會產生一個大小與 和 相同(與 和 大小相同的)數組,其中包含每個點的掩碼值。您可以將面罩用作maskmask[x_bin_idx, y_bin_idx]x_bin_idxy_bin_idxxy
x[selection] # Elements of x in mask
y[selection] # Elements of y in mask
如果你絕對需要整數索引,那么門檻不是你最好的選擇。where
indices = np.flatnonzero(selection)
或
indices = selection.nonzero()[0]
如果您的目標只是從 中提取值,我建議將它們堆疊到單個數組中:xy
coords = np.stack((x, y), axis=1)
這樣,您不必應用索引兩次,只需提取值即可
coords[selection, :]
或
coords[indices, :]
根據 和 的相對密度,布爾掩碼或線性索引可能更快。你將不得不對一些相關的案例進行計時,以獲得更好的直覺。maskxy
添加回答
舉報