numpy 向量化逻辑索引

k3bvogb1  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(100)

我有一个三通道的图像,我还有一个掩码,它从每个通道随机提取相同数量的像素(但在不同通道之间不一定相同)。
有没有可能矢量化提取过程,也就是说,在通道上的循环?
下面是我尝试用非矢量化的方式来做的:
到目前为止,我的直觉是,通过掩码是不可能的,因为先验不清楚每个掩码具有相同数量的True值。

import numpy as np
np.random.seed(0)
# set up image
img = np.random.random((3, 100, 111))

# set up some mask with same number of "True" pixels per channel
p = 0.3
mask_array = np.stack([np.random.permutation(np.prod(img.shape[1:])).reshape(img.shape[1:]) > p for _ in range(img.shape[0])], axis=0)
print(mask_array.shape) # same as img.shape

# can we vectorize the loop over k away?
output = np.stack([img[k, mask_array[k, ...]] for k in range(img.shape[0])], axis=0)

print(output.shape)  # img.shape[0] x N

字符串

e4eetjau

e4eetjau1#

将蒙版应用于图像将产生一个扁平的数组。然后您可以重塑结果:

vector_output = img[mask_array].reshape((3, -1))

assert np.allclose(output, vector_output) # Assertion succeeds

字符串

相关问题