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

如何在Python中删除Nd矩阵中的零切片/图像?,python,python-3.x,matrix,Python,Python 3.x,Matrix,我有一个维数为(256256100)的Nd矩阵a。其中,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

我有一个维数为(256256100)的Nd矩阵
a
。其中,
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)

更新:很抱歉,我遗漏了一项要求。我有一个向量
B
,形状为(100,)。它包含从1到100的每个切片的id。当我们移除矩阵A中的切片时,我还想移除向量B中的id/索引。感谢

我们可以计算“零”图像的布尔掩码,如下所示

zero_mask = A.sum((0,1)) == 0
要删除相应的图像,我们可以使用

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

我们可以计算“零”图像的布尔掩码,如下所示

zero_mask = A.sum((0,1)) == 0
要删除相应的图像,我们可以使用

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

A=A[…,A.sum((0,1))!=0]
?很好的解决方案。我缺少一个要求。请稍候,我正在更新我已更新。你能看一下并回答吗?我会接受它,然后运行
B=B[A.sum((0,1))!=0]
?我认为你应该运行
B=…
,然后运行@Yakym的
A=…
,或者使用@Yakym Pirozhenko的答案。
A=A[…,A.sum((0,1))!=0]
?很好的解决方案。我缺少一个要求。请稍候,我正在更新我已更新。你能看一下并回答吗?我会接受它,然后运行
B=B[A.sum((0,1))!=0]
?我想你应该运行
B=…
,然后运行@Yakym的
A=…
,或者使用@Yakym Pirozhenko的答案。这是我期望的解决方案。谢谢,这是我期望的解决方案。谢谢你