如何在Python中删除Nd矩阵中的零切片/图像?

时间:2018-02-05 06:50:38

标签: python python-3.x matrix

我有一个Nd矩阵A,其维度为(256,256,100)。其中,256x256是高度和宽度,100是图像/切片的数量。在100图像中,它们有一些图像为零(仅背景),其他图像为非零(包括背景和前景)。背景强度为0,前景强度为1.我想从矩阵A中删除/删除零切片/图像。我怎样才能有效地在python中进行?

这是我的实施,但我认为我们可以做得更好

import numpy as np
h, w, c = A.shape
for i in range (c): 
   A_slice=A[:,:,i]
   sum_in= np.sum(A_slice)
   if (sum_in==0):
      np.delete(A,A_slice)

更新:抱歉,我错过了一项要求。我有一个形状为(100,)的向量B。它包含从1到100的每个切片的id。当我们删除矩阵A中的切片时,我还想在向量B中删除它的id / index。谢谢

1 个答案:

答案 0 :(得分:2)

我们可以为"零"计算一个布尔掩码。图像为

zero_mask = A.sum((0,1)) == 0

要删除相应的图片,我们可以使用

A = A[..., ~zero_mask]
B = B[~zero_mask]