2015-01-26 2 views
1

У меня есть два изображения называется изображением и маску со следующими формами:индексация последнего размера Numpy массива

image shape: (876, 1020, 3) 
mask shape: (876, 1020) 

То, что я пытаюсь сделать, это разделить каждый из трех элементов изображения с маской, где Маска не равна нулю. Итак, я делаю:

import numpy as np 

index = np.nonzero(mask) 
image[index, :] = image[index, :]/mask[index] 

Это, однако, заставляет программу занимать много времени, а затем она терпит неудачу;

ValueError: операнды не могут передаваться вместе с формами (2,302793,1020,3) (302793,)

+1

Вы играли с этим вычислением в интерактивной оболочке Python с меньшими массивами? – hpaulj

ответ

4

Если у вас нет проблем с памятью с созданием копии маски, вы может установить нулевые элементы в 1 и разделить непосредственно:

mask2 = mask.copy() 
mask2[mask2==0]=1 
image /= mask2[...,np.newaxis] 
Смежные вопросы