2017-01-02 69 views
1

假设我有一个形式为(B, H, W, C)的输入numpy数组,并且有一个网格,其格式为(B, W),y值为(B, H)向量化批量图像像素查找numpy阵列

我的目标是使用x和y值来获取图像数组的C值。我能够做到这一点,当B = 1那是当我的形象是(H, W, C)的形式,当x和y的形式(H\W,)的形式,但没有线索如何扩大到一个单一的numpy数组中包含的图像批处理。

是否有某种我可以利用的重塑?

假设我有大小(400, 400, 3)的2倍猫的图像。然后input_img.shape = (2, 400, 400, 3)

我有一个列表x.shape = (2, 400)y.shape = (2, 400)和与想以索引到input_img使得我获得每个(x_i, y_i)阵列z_i.shape = (C,)共计z.shape = (400, C)

我试图向量化

for i in range(batch_size): 
    z_i = input_img[i, x[i], y[i]] 
+0

添加样品的情况下? – Divakar

+0

@Divakar刚刚添加:) –

+0

你能完成迭代代码吗?所以,我猜测它会沿着这些方向走:'z_i = input_img [.....]'。我不确定那个“.....”部分,我猜测这部分涉及到x_i和y_i。 – Divakar

回答

2

下面是使用的方法advanced-indexing -

input_img[np.arange(batch_size)[:,None], x, y] 
+0

谢谢,这工作,但它没有给我预期的结果。我得到了形状的输出图像(2,400,3),所以我缺少一个尺寸(2,400,400,3)。你有什么线索可以修复代码来评估(x_i y_i)网格的像素值吗? –

+0

@KevinZakka尝试:'input_img [np.arange(batch_size)[:,None,None],x [:,None],y]'? – Divakar

+0

非常感谢! 'input_img [np.arange(batch_size)[:,None,None],y0,x0]'诀窍:) –