2015-01-26 158 views
1

我有一個大陣列,並且希望在某個偏移處放置一個較小的陣列,同時忽略較小陣列中的零。什麼是最好的方式來做到這一點?在較大的陣列中放置較小的陣列,同時忽略零點

我試圖掩蓋陣列但不知何故,這是緩慢的

mask = np.ma.masked_equal(pixels, 0, False) 
output[offset_y:offset_y+tile_height,offset_x:offset_x+tile_width] = np.where(mask.mask, output[offset_y:offset_y+tile_height,offset_x:offset_x+tile_width], pixels) 

那麼我想這

np.place(output[offset_y:offset_y+tile_height,offset_x:offset_x+tile_width], pixels>0, pixels[pixels>0]) 

但它是非常緩慢的

什麼是這樣做的最快方法是什麼?

+0

創造合適大小的新的空數組,並從原始和新的陣列值複製到它。我試圖先從較小的數組中刪除零。 – hpaulj 2015-01-26 22:44:04

+0

給我們一些關於你正在處理的數組的大小和形狀的想法。更好的是,給我們一些小的小陣列來測試。 – hpaulj 2015-01-26 22:44:50

+0

輸出的尺寸是30000x50000,像素是16000x16000 .. – haehn 2015-01-26 22:45:38

回答

2

我懷疑普通的舊邏輯索引將是最有效的位置:

# make a view into output with the same dimensions as `pixels` 
output_subarray = output[offset_y:offset_y+tile_height,offset_x:offset_x+tile_width] 

mask = pixels != 0 
output_subarray[mask] = pixels[mask]