第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在 Python 中使用 2D 蒙版從 (x,y) 字段中高效選擇元素

在 Python 中使用 2D 蒙版從 (x,y) 字段中高效選擇元素

慕勒3428872 2022-09-20 16:38:57
我有一個(gè)大的 2D 位置數(shù)據(jù)字段,以?xún)蓚€(gè)數(shù)組的形式給出,其中 .我想返回索引數(shù)組,該數(shù)組被一個(gè)名為 的 N x N 數(shù)組掩蔽。那是。該數(shù)組僅由 s 和 s 組成。xylen(x) == len(y)idx_masked(x[idx_masked], y[idx_masked])intmaskmask[x[idx_masked], y[idx_masked]] == 1mask01我想出了以下解決方案,但它(特別是下面的最后一行)非常慢,因?yàn)槲矣蠳 x N = 5000 x 5000,重復(fù)1000次:import numpy as npimport matplotlib.pyplot as plt# example mask of one corner of a squareN = 100mask = np.zeros((N, N))mask[0:10, 0:10] = 1# example x and y position arrays in arbitrary unitsx = np.random.uniform(0, 1, 1000)y = np.random.uniform(0, 1, 1000)x_bins = np.linspace(np.min(x), np.max(x), N)y_bins = np.linspace(np.min(y), np.max(y), N)x_bin_idx = np.digitize(x, x_bins)y_bin_idx = np.digitize(y, y_bins)idx_masked = np.ravel(np.where(mask[y_bin_idx - 1, x_bin_idx - 1] == 1))plt.imshow(mask[::-1, :])plt.scatter(x, y, color='red') plt.scatter(x[idx_masked], y[idx_masked], color='blue')有沒(méi)有更有效的方法來(lái)做到這一點(diǎn)?
查看完整描述

1 回答

?
MM們

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊

假設(shè)您的字段覆蓋了相同大小的條柱,則無(wú)需顯式定義條柱。 可以從簡(jiǎn)單的樓層劃分確定每個(gè)位置,因?yàn)槟烂總€(gè)箱子的大小。我建議使用總寬度(您傳入的內(nèi)容),而不是,如果您當(dāng)然知道范圍的預(yù)期大小。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

這將比數(shù)字化更快,更簡(jiǎn)單,并且可以避免在開(kāi)始時(shí)出現(xiàn)額外的箱子。


對(duì)于大多數(shù)目的,您不需要 。90%的問(wèn)題(包括這個(gè)問(wèn)題)不應(yīng)該使用。如果您想要一種快速訪(fǎng)問(wèn) 和 的必要元素的方法,只需使用布爾掩碼即可。面具很簡(jiǎn)單np.wherewherexy


selction = mask[x_bin_idx, y_bin_idx].astype(bool)

如果已經(jīng)是布爾值(無(wú)論如何都應(yīng)該是布爾值),則表達(dá)式就足夠了。它會(huì)產(chǎn)生一個(gè)大小與 和 相同(與 和 大小相同的)數(shù)組,其中包含每個(gè)點(diǎn)的掩碼值。您可以將面罩用作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

如果你絕對(duì)需要整數(shù)索引,那么門(mén)檻不是你最好的選擇。where


indices = np.flatnonzero(selection)


indices = selection.nonzero()[0]

如果您的目標(biāo)只是從 中提取值,我建議將它們堆疊到單個(gè)數(shù)組中:xy


coords = np.stack((x, y), axis=1)

這樣,您不必應(yīng)用索引兩次,只需提取值即可


coords[selection, :]


coords[indices, :]

根據(jù) 和 的相對(duì)密度,布爾掩碼或線(xiàn)性索引可能更快。你將不得不對(duì)一些相關(guān)的案例進(jìn)行計(jì)時(shí),以獲得更好的直覺(jué)。maskxy


查看完整回答
反對(duì) 回復(fù) 2022-09-20
  • 1 回答
  • 0 關(guān)注
  • 82 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)