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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在屏蔽數(shù)組中形成項目索引,計算原始排序數(shù)組中相同項目的索引

在屏蔽數(shù)組中形成項目索引,計算原始排序數(shù)組中相同項目的索引

Qyouu 2023-09-12 10:47:19
我使用下面的方法屏蔽了排序的一維 numpy 數(shù)組(遵循此處提出的解決方案):def get_from_sorted(sorted,idx):     mask = np.zeros(sorted.shape, bool)     mask[idx] = True     return sorted[mask]python 方法在對索引進行屏蔽后返回數(shù)組idx。例如,如果 Sorted=np.array([0.1,0.2,0.3.0.4,0.5])和 idx= np.array([4,0,1]),則該方法get_from_sorted應該返回np.array([0.1,0.2,0.5])(注意原始數(shù)組中的順序被保留。)問題:我需要獲取屏蔽后數(shù)組中項目的索引與原始列表中項目的索引之間的映射。在上面的例子中,這樣的映射是0 -> 01 -> 12 -> 5因為 0.1、0.2 和 0.5 分別位于 中的第 0 位、第 1 位和第 5 位sorted。如何有效地對該映射進行編程?對效率的要求:效率是我解決問題的關鍵。這里,“idx”和“sorted”都是一個包含 100 萬個元素的一維數(shù)組,idx 是一個包含約 50 萬個元素的一維數(shù)組(取自圖像處理應用程序)。因此,針對原始數(shù)組逐一或以矢量化方式檢查屏蔽數(shù)組的元素(例如使用 np.where)在我的情況下表現(xiàn)不佳。理想情況下,屏蔽數(shù)組和原始排序數(shù)組中的索引之間應該存在相對簡單的數(shù)學關系。任何想法?
查看完整描述

3 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

有一個問題我不清楚。它可以有多種解釋。


mask -> idx(按升序排列):

讓我嘗試一下這個相當大的數(shù)據(jù)集(10M 的值,其中 10% 是True):


x = np.random.choice(a=[False, True], size=(10000000,), p=[0.9, 0.1])

在這種情況下,使用np.where是非常有效的:


%timeit np.where(x)[0]

%timeit x.nonzero()[0]

%timeit np.arange(len(x))[x]

24.8 ms ± 551 μs per loop (mean ± std. dev. of 7 runs, 10 loops each)

24.5 ms ± 229 μs per loop (mean ± std. dev. of 7 runs, 10 loops each)

52.4 ms ± 895 μs per loop (mean ± std. dev. of 7 runs, 10 loops each)

排序的隨機項 -> idx (按升序):

如果您丟失了對需要從中獲取的項目位置的任何引用sorted,您仍然可以查找idx是否沒有重復的項目。這是O(n logn):


x = np.random.choice(a=[False, True], size=(10000000,), p=[0.9, 0.1])

arr = np.linspace(0,1,len(x))

sub_arr = arr[x] %input data: skipping 90% of items


%timeit np.searchsorted(arr, sub_arr) %output data

112 ms ± 2.2 ms per loop (mean ± std. dev. of 7 runs, 10 loops each) 

idx(任意順序)-> idx(升序)

這很簡單:


x = np.arange(10000000)

np.random.shuffle(x)

idx = x[:1000000] #input data: first 1M of random idx

%timeit np.sort(idx) #output data

65.3 ms ± 316 μs per loop (mean ± std. dev. of 7 runs, 10 loops each)


查看完整回答
反對 回復 2023-09-12
?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

如果您需要知道屏蔽條目的來源,可以使用np.where、np.nonzero或 之一np.flatnonzero。但是,如果您只需要獲取索引子集的起源,則可以使用我最近作為庫的一部分編寫的函數(shù) haggis:?1。haggis.npy_util.unmasked_index

給定mask一些掩碼元素的索引,您可以使用以下命令檢索原始位置的多維索引

unmasked_index(idx,?mask)

如果您需要它,還有一個反函數(shù)haggis.npy_util.masked_index,可以將多維輸入數(shù)組中的位置轉換為其在掩碼數(shù)組中的索引。


查看完整回答
反對 回復 2023-09-12
?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

我假設(根據(jù)您的示例)原始列表是排序列表。在這種情況下,除非我誤解了,否則你只需這樣做:

idx.sort()

然后映射是i-> idx[i]

當然,如果原始順序idx很重要,請先復制一份。


查看完整回答
反對 回復 2023-09-12
  • 3 回答
  • 0 關注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號