在较大的阵列中放置较小的阵列,同时忽略零点

问题描述:

我有一个大阵列,并且希望在某个偏移处放置一个较小的阵列,同时忽略较小阵列中的零。什么是最好的方式来做到这一点?在较大的阵列中放置较小的阵列,同时忽略零点

我试图掩盖阵列但不知何故,这是缓慢的

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

我怀疑普通的旧逻辑索引将是最有效的位置:

# 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]