我有一个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。谢谢
答案 0 :(得分:2)
我们可以为"零"计算一个布尔掩码。图像为
zero_mask = A.sum((0,1)) == 0
要删除相应的图片,我们可以使用
A = A[..., ~zero_mask]
B = B[~zero_mask]